중첩 대상 - 배치

중첩 대상 - 배치

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

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

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

답변1

배치 파서에는 여러 단계가 있습니다. 보다Windows 명령 해석기(CMD.EXE)는 스크립트를 어떻게 구문 분석합니까?더 많은 정보를 위해서.

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

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

/R1) 현재 디렉터리에서 제대로 작동 하도록 루트 폴더로 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

관련 정보