for %a in (*) do (set tmpx=%a & echo %tmpx%)
이전 코드의 문제는 확장을 지연됩니다. 예, 활성화했으나 사용하지 않았고 활성화 된 방법에 따라 작동하지 않습니다.
cmd
에서 라인 또는 블록 블록 (괄호 안의 코드)에 도달하면 처음입니다 파싱 된 후 실행됩니다. 구문 분석 단계에서 변수 읽기 작업이 명령에서 제거되고 변수 의 값으로 바뀌기 전에 명령이 실행되기 시작합니다. 따라서 라인/블록 내부의 변수 값을 변경하면 동일한 라인/블록 내에서 변경된 값을 검색 할 수 없습니다 (바뀌 었음)
setlocal enabledelayedexpansion
) 변수 읽기 구문은 %var%
에서 !var!
으로 파서에게 읽기 작업이 실행 단계까지 지연 될 것임을 나타냅니다.
따라서, 귀하의 경우, 코드는
setlocal enabledelayedexpansion & for %a in (*) do (set "tmpx=%a" & echo !tmpx!)
같은 것을 했어야하지만 이것은 (기본 구성 환경에서) 작동하지 않습니다.
cmd
에는 배치 파일과 명령 줄의 두 가지 실행 모드가 있습니다. 귀하의 경우에는 명령 줄 (for
루프에서 이스케이프 된 백분율 기호 없음)을 사용하고 명령 줄 모드에서 setlocal enabledelayedexpansion
이 작동하지 않습니다. 배치 파일 용입니다 (setlocal /?
참조)
명령 줄에서 작동시키는 방법은 무엇입니까?기본적으로 cmd
은 지연된 확장을 사용하지 않고 시작되며 배치 파일 내에 있지 않으면 활성화 할 수 없습니다. 하지만이 활성화 지연 확장을 cmd
를 시작하고이 인스턴스를 시작 당신의 이름 바꾸기 문제를 해결하기 위해,
cmd /v:on /c "for %a in (*) do (set "tmpx=%a" & echo !tmpx!)"
어쨌든 (cmd /?
참조) 명령을 실행할 수 있습니다, 지연 확장은
for %a in (*_*.tif) do for /f "tokens=1,* delims=_" %b in ("%~nxa") do echo ren "%a" "%c"
을 즉 필요하지 않습니다 밑줄이있는 각각의 tif
파일에 대해 파일 이름 (%~nxa
)을 문자열로 취하고 밑줄을 토큰 사이의 구분 기호로 사용하여 첫 번째 토큰 (첫 번째 밑줄의 왼쪽에있는 텍스트)을 검색합니다. %b
및 나머지 테 xt (밑줄의 오른쪽으로)를 %c
에 입력하십시오. 이제 원래 파일 이름 (%a
에 저장 됨)의 내용을 %c
(밑줄 오른쪽 텍스트)의 이름으로 바꿉니다.
이 코드에서 이름 바꾸기 작업은 콘솔에만 표시됩니다. 출력이 올 바르면 echo
명령을 제거하십시오.
[루프를 사용하여 파일 이름 바꾸기 일괄 처리] 가능한 복제본 (http://stackoverflow.com/questions/19453995/batch-rename-file-using-for-loop) – DavidPostill