
여러 파일을 처리하는 Windows 배치 파일이 있습니다. 이의 일부로 다음 줄을 사용합니다.
forfiles /p "%~dpn1%LogDir%" /m "%SupportLog%*" /c "cmd /c logreader.py @file > \"%~dpn1%ParsedLogDir%\@file_Logreader.txt\"
이것은 정상적으로 작동하지만 본질적으로 내 모든 파일(%SupportLog%*)을 반복하고 각각을 "logreader.py" 스크립트에 전달합니다.
제가 정말로 원하는 것은 이러한 모든 파일의 목록이나 매개변수를 생성하고 모든 파일을 한 번에 Python 스크립트에 전달하는 것입니다. 실행해야 하는 명령은 다음과 같습니다.
logreader.py "logfile.log" "logfile.log.1" "logfile.log.3" .....
forfile 명령 내에서 SET 명령을 다음과 같이 사용하려고 했습니다.
forfiles /p "%~dpn1%LogDir%" /m "%SupportLog%*" /c "cmd /c set PARAMS=%PARAMS%@file "
그러나 이것을 실행하고 ECHO를 ON으로 두면 다음이 표시됩니다.
forfiles /p "C:\Path\log" /m "logfile.log*" /c "cmd /c set PARAMS=@file "
이는 잘못된 것입니다. 그리고 "echo %PARAMS%"를 실행하면 결과가 나오지 않습니다.
이것을 달성하는 방법이 있습니까?
많은 감사
답변1
환경 변수 변경어린이 cmd
인스턴스(호출하는 내용 cmd /c
)는 상위 프로세스의 환경에 영향을 주지 않습니다 cmd
. 다음 코드 조각이 도움이 될 수 있습니다.
SETLOCAL EnableExtensions EnableDelayedExpansion
set "LogDir=%~dpn1log" my guess only
set "SupportLog=logfile.log" my guess only
set "PARAMS=" initial value
rem 1st try for /R "%LogDir%" %%a in ("%SupportLog%*") do set PARAMS=!PARAMS! "%%~a"
rem 2nd try for %%a in ("%LogDir%\%SupportLog%*") do set "PARAMS=!PARAMS! "%%~a""
rem 3rd try
for %%a in ("%LogDir%\%SupportLog%*") do set "PARAMS=!PARAMS! "%%~nxa""
echo logreader.py %PARAMS%
명령형은 디버깅 목적으로 logreader.py
만 사용되었습니다.echo
하지만 리디렉션 대상이 파악되지 않습니다 >
. 죄송합니다.
자원(필수 읽기):
- (명령 참조)Windows CMD 명령줄의 AZ 인덱스
- (추가 특징)Windows CMD 셸 명령줄 구문
- (
%~a
등 특별 페이지)명령줄 인수(Parameters) - (
>>
,2>1
등 특별 페이지)리디렉션
편집하다:
- 첫 번째 시도
for /R
폴더 트리를 반복합니다.: 거부됨; 노력하다for %%a
:여러 파일에 대해 조건부로 명령을 수행합니다.; - 두 번째 시도에서는
"%%~a"
완전한 파일 이름을 제공합니다. - 세 번째 시도에서는
"%%~nxa"
기본 파일 이름과 확장명(경로 없음)을 제공합니다.