홈>
@echo off
for /f "tokens=1,2 delims=," %%x in (my.csv) do (
if %M% LSS %%x set M=%%x
)
echo Max X Value= %M%
때로는 잘 작동하고 때로는 다음과 같은 오류로 실패합니다 :
%x was unexpected at this time.
- 답변 # 1
- 답변 # 2
M
라는 환경 변수가 없습니다 이 줄을 해석하면 :if %M% LSS %%x set M=%%x
1 차 교체 후, 통역사에게
paxdiablo가if LSS %x set M=%x
%M%
에 대해 언급 한 문제를 피하기 위해 루프가 처음 일 때만 확장되는 경우, 그가 논의한 지연 확장 기능을 사용하거나 테스트 및 설정 이동 및M
를 설정할 수 있습니다 루프에서 호출되지만 루프 외부에 존재하는 서브 루틴으로 연결되어 각 호출에서 해석 (및 확장)됩니다.@echo off set M= for /f "tokens=1,2 delims=," %%x in (my.csv) do ( call :setmax %%x ) echo Max X Value= %M% goto :eof :setmax if "%M%" == "" set M=%1 if %M% LSS %1 set M=%1 goto :eof
- 답변 # 3
문제는
if %M%
에 있습니다 성명서. % M %는 어디에 있습니까? 먼저 선언하십시오.@echo off set M="" for /f "tokens=1,2 delims=," %%x in (file) do ( if %M% LSS %%x set M=%%x ) echo Max X Value= %M%
대안, vbscript를 사용할 수 있습니다
Set objFS = CreateObject("Scripting.FileSystemObject") Set objArgs = WScript.Arguments strFile = objArgs(0) Set objFile = objFS.OpenTextFile(strFile) t=0 Do Until objFile.AtEndOfStream linenum = objFile.Line strLine = objFile.ReadLine s = Split(strLine,",") For Each num In s WScript.Echo "num "&num If Int(num) >= t Then t=Int(num) End If Next WScript.Echo "Max for line:" & linenum & " is " & t Loop
예제 출력
C:\test>type file 422,34464,55455,65421,88 C:\test>cscript //nologo test.vbs file Max for line:1 is 65421
업데이트 : 현명한 최대 값 열을 찾으려면
Set objFS = CreateObject("Scripting.FileSystemObject") Set objArgs = WScript.Arguments strFile = objArgs(0) Set objFile = objFS.OpenTextFile(strFile) t=0 Do Until objFile.AtEndOfStream linenum = objFile.Line strLine = objFile.ReadLine s = Split(strLine,",") If Int(s(0)) >= t then t=Int(s(0)) End If Loop WScript.Echo "Max is " & t & " (line: " & linenum & ")"
출력
C:\test>type file 422,34 464,55 455,65 421,88 C:\test>cscript //nologo test.vbs file Max is 464 (line: 2)
관련 자료
- windows - \\ wsl $의 주소 표시 줄에서 실행 된 배치 스크립트가 예상대로 작동하지 않습니다
- cmd - youtube-dl로 비디오를 다운로드하고 FFmpeg로 변환하는 배치 스크립트
- Batch Script - 배치 스크립트 - findstr csv 파일을 결과로 덮어 쓰기
- 배치 스크립트에 루프를 포함 시키거나 포함시키는 방법
- 배치 스크립트를 사용하여 Java 파일을 검색하고 다른 파일로 출력
- 배치 스크립트를 사용하여 한 서버에서 다른 서버로 파일 복사
- 앱 스크립트에서 배치 http 엔드 포인트가 드라이브 앱에 사용되는지 확인하는 방법
- youtube dl - 배치 스크립트에서 사용자 입력을 매개 변수에 전달하는 방법은 무엇입니까?
- linux - bash 스크립트 (Makefile)에서 예기치 않은 파일 끝 오류가 중첩 된 for-loop
- database - Windows 배치 스크립트의 For/F 문 오류
- 변수에 COM 포트를 가져 오기위한 CMD의 배치 스크립트
- for loop - 하위 폴더에서 기본 폴더 필터링 확장 프로그램으로의 스크립트 일괄 복사
- docker - bash 스크립트 파일 pterodactyl의 예기치 않은 끝
- if statement - 실행 파일에 대한 두 개의 파일 경로를 찾은 다음 실행하는 배치 스크립트를 작성하는 방법
- powershell - 콘솔에 입력 한 비밀번호 숨기기 - 배치 스크립트
- uninstaller - 이 배치 스크립트를 실행할 수 없습니다 첫 번째 명령 후에 중지됩니다
- javascript - 기본 인증을 사용하는 Google Apps Script의 UrlFetchAppfetch에서 예기치 않은 오류가 발생했습니다
- 이 배치 스크립트가 파이썬 프로그램을 시작하지 않는 이유는 무엇입니까?
- Replace는 powershell에서는 작동하지만 배치 스크립트는 작동하지 않습니다
- dataframe - 파이썬 스크립트는 pycharm에서 올바르게 실행되지만 배치 파일에서는 실행되지 않습니다
관련 질문
- windows : 배치 스크립트를 사용하여 여러 폴더를 압축하는 방법
- windows : 텍스트 파일의 각 줄에서 구문 분석되는 알 수 없는 변수 수 설정
- windows : Pageant가 SSH 키 로드를 완료하면 배치 파일 실행
- windows : 아직 압축하지 않은 경우 모든 폴더를 압축합니다.
- windows : 일괄 -인쇄 에코가 꺼져 있습니다.
- windows : BATCH에서 특수 문자로 인수 전달
- windows : 배치 파일을 통해 파일을 삭제하기 전에 확인
- 배치 스크립트의 상자 그리기 문자(Windows CMD)
- windows : 변수가 있는 중첩 FOR
- windows : 구문을 깨지 않고 배치 스크립트의 공백
문제는 당신이
%m%
를 사용하고 있다는 것입니다for
내부 고리. 루프를 읽을 때 (반복 전에) 평가됩니다. 즉, 닫는 괄호까지 포함하여 전체 루프를 읽고 실행하기 전에 평가합니다. 그래서%m%
루프 내에서 실제로 설정 한 값에 관계없이 항상 초기 값입니다.예를 들어 이것을 희망적으로 설명해야한다 :
이로 인해 예기치 않은 결과가 발생했습니다 :
%val%
첫 번째 반향 문에서 해석됩니다 (즉, 전체for
루프가 해석되기 전에 실행됩니다.m
의 가치를 강요하는 무언가와 함께 확장 지연이 필요합니다 첫 번째%%x
로 설정 상관없이.setlocal
사용하기 명령과!m!
%m%
대신m
의 평가를 지연시킬 것입니다 줄이 실행될 때까지또한
m
설정 처음에는 아무것도하지 않고 그것을%%x
로 강요 그것이있을 때아무것도%%x
의 첫 번째 가치를 보장하지 않습니다m
에로드 .이
my.csv
와 함께 위의 코드 사용 파일 :결과 :
예상했거나 다른 의견의 샘플 데이터 :
당신은 얻는다 :