중첩-배치


0

이 코드에 약간의 문제가 있습니다.

for %%A in (tmp1,tmp2,tmp3) do (
    for /R C:\%%A %%B in (*.txt) do copy %0 "%%~B" /Y
)

오류 메시지 또는 이와 유사한 메시지가 표시되지 않고 코드가 실행되지만 작동하지 않습니다. 누구든지 내게 빛을 줄 수 있습니까? 감사!


무엇을하려고합니까? 이걸 어떻게 전화 했어?
krowe

승인 할 수 있습니다. 스크립트에 명확한 구문 부정확성이 포함되어 있지 않지만 명령에서 전혀 %%A확장되지 않습니다 for /R C:\%%A .... 지연된 확장 이 활성화 또는 비활성화 되었는지에 관계없이 Win8에서 로 확인 되었습니다. ed 및 확장 출력 의 해결 방법 : . 문제의 원인 (행사)을 모르기 때문에 귀하의 질문에 대답 하고 싶지 않습니다. BTW :이 질문은 여기가 아니라 stackoverflow.com 에서 질문해야합니다 .echo onechofor /f "tokens=*" %%B in ('dir /B /S "C:\%%~A\*.txt"') do echo "%%~A" copy "%~0" "%%~B" /Y
JosefZ

답변:


1

배치 파서에는 여러 단계가 있습니다. Windows Command Interpreter (CMD.EXE)가 스크립트를 어떻게 구문 분석합니까?를 참조하십시오 . 더 많은 정보를 위해서.

FOR 문 옵션은 FOR 변수 확장 전에 구문 분석되므로 FOR 옵션 내에서 FOR 변수 (또는 지연된 확장)를 사용할 수 없습니다.

두 가지 해결 방법이 있습니다.

1) /R현재 디렉토리에서 올바르게 작동 하도록 루트 폴더에 PUSHD .
이 옵션이 가장 좋습니다.

for %%A in (tmp1,tmp2,tmp3) do (
  pushd c:\%%A
  for /R %%B in (*.txt) do copy %0 "%%~B" /Y
  popd
)

2) 값을 CALL 인수로 전송

for %%A in (tmp1,tmp2,tmp3) do call :copyLoop c:\%%A
exit /b

:copyLoop
for /r %1 %%B in (*.txt) do copy %0 "%%~B" /Y
exit /b

고마워, 드 벤햄! 나는 pushd 명령과 함께 사용하려고 시도했고 작동했습니다
Pedro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.