앞에 "cd /d"(Windows 10, 배치 파일)가 있으면 For 루프가 작동하지 않습니다.

앞에 "cd /d"(Windows 10, 배치 파일)가 있으면 For 루프가 작동하지 않습니다.

MP4 파일 폴더 내의 배치 파일에서 이것을 실행하면 마지막으로 수정된 MP4 파일을 변수로 설정하여 기본 미디어 플레이어로 재생할 수 있습니다.

:: Set last modified MP4 file in current folder, as a variable...
for /f "eol=: delims=" %%F in ('dir /B /O:D *.mp4') do @set "newest=%%F"

:: Play the file (opens in default media player)...
"%newest%"

MP4 파일 폴더 외부의 배치 파일에 다음을 넣으려고 하면 cd /dfor 루프에서 무시되고 작동하지 않습니다.

:: Change to directory containing MP4 files...
cd /d "C:\My Videos"

:: Set last modified MP4 file in "C:\My Videos", as a variable (not working)...
for /f "eol=: delims=" %%F in ('dir /B /O:D *.mp4') do @set "newest=%%F"

:: Copy the MP4 to current folder...
xcopy "%newest%" "%CD%" /i /r /v /k /f /c /h /y >nul 2>&1

:: Change back to current directory
cd /d "%CD%"

보시다시피 for 루프 명령은 각 예제에서 정확히 동일합니다. 첫 번째에서는 작동하지만 두 번째에서는 작동하지 않습니다.

pause오류가 나타나는지 확인하기 위해 각 명령 사이에 넣어 보았지만 아무 것도 나타나지 않았습니다.

나는 주위에서 큰 따옴표를 제거하려고 시도했지만 %CD%아무런 차이가 없습니다.

Setlocal EnableDelayedExpansion명령 앞에 넣으려고했는데 아무 것도하지 않습니다.

이전에는 DIR 명령을 추가하여 FOR 루프에서 직접 폴더를 지정하려고 시도했지만 /S어떤 이유로 수정된 날짜가 무의미한 임의 날짜이고 마지막으로 수정된 MP4가 아닌 잘못된 MP4 파일을 복사했습니다. 그 명령은 다음과 같았습니다.

for /f "eol=: delims=" %%F in ('dir /B /S /O:D "C:\My Videos\*.mp4"') do @set "newest=%%F"

MP4를 변수로 설정했지만... 올바른 변수는 아닙니다!

MP4 파일 폴더 내에서 배치 파일을 사용하면 항상 그런 식으로 작동한다는 것을 알고 있습니다.

왜 이것이 작동하지 않는지 알려줄 수 있는 사람에게 미리 감사드립니다.

답변1

귀하의 스크립트는 %CD%처음부터 끝까지 원래 값을 유지한다고 가정합니다. 하지만 이는 이 변수가 작동하는 방식이 아닙니다. 항상 현재 디렉터리를 나타내도록 인터프리터에 의해 동적으로 업데이트됩니다. 그리고 첫 번째 cd명령 후에 경로는C:\My Videos 된다"현재" 디렉토리.

따라서 dir새 위치에서 파일을 찾고 xcopy찾은 파일을 원래 있던 위치로 다시 복사하려고 시도하면 마지막으로 cd /d "%CD%""이미 있는 디렉터리로 변경하세요"라는 메시지가 나타납니다. 이 시점에서는 %CD% 때문에 이전 위치로 돌아오지 않습니다.~이다"C:\내 비디오".

이전 경로를 명시적으로 기록해야 합니다.~ 전에다른 곳에서 cd'ing(예 set "PrevDir=%CD%": .

관련 정보