
각 파일 이름을 반복하고 문자열의 일부를 사용하며 생성 날짜와 수정 날짜를 설정하는 배치 파일을 작성하려고 합니다. dirpath는 실제 경로에 대한 자리 표시자입니다.
@echo off
setlocal enabledelayedexpansion
FOR /R dirpath %F in (*.*) DO (SET FNAME=%~nF SET MM=%FNAME:~0,2% SET DD=%FNAME:~2,2% SET YY=%FNAME:~4,2% nircmd.exe setfiletime %F "%DD% %MM%-20%YY% 00:00:00" "%DD%-%MM%-20%YY% 00:00:00")
스크립트가 수행하는 문제를 해결하는 방법조차 잘 모르겠습니다. 일시 중지는 루프 후에 프로그램을 일시 중지하지 않습니다. 이것을 함수로 어떻게 다시 작성할 수 있습니까?
답변1
이것을 함수로 어떻게 다시 작성할 수 있습니까?
배치 파일에 여러 가지 문제가 있습니다.
- 그렇지 않습니다
%f
. 대신 사용이 필요합니다%%f
.%f
최소한 3곳을 수정해야 하는 명령줄용입니다. do ( ... )
나는 별도의 줄 에 명령을 넣을 것입니다 .- 닫기 전에 일시정지할 수 있습니다.
)
rem
배치 파일이 수행하는 작업을 보려면 첫 번째 줄을 주석 처리할 수 있습니다 .echo
를 사용하여 페이로드 라인에 추가합니다nircmd
.echo
작동한다고 생각되면 제거하십시오 .- 루프 내부
!
대신 사용할 수 있는 장소가 필요합니다 (이것이 바로 그 목적입니다. 구문 분석 시가 아닌 실행 시에 변수를 확장할 수 있습니다).%
for
enabledelayedexpansion
다음 배치 파일로 시작합니다(주요 실수는 수정했습니다).
@echo off
setlocal enabledelayedexpansion
for /r dirpath %%F in (*.*) DO (
set FNAME=%%~nF
SET MM=!FNAME:~0,2!
SET DD=!FNAME:~2,2!
SET YY=!FNAME:~4,2!
echo nircmd.exe setfiletime %%F "!DD!-!MM!-20!YY! 00:00:00" "!DD!-!MM!-20!YY! 00:00:00"
pause
)
endlocal
추가 자료
- Windows CMD 명령줄의 AZ 인덱스- Windows cmd 라인과 관련된 모든 것에 대한 훌륭한 참고 자료입니다.
- 활성화 지연확장- 지연된 확장으로 인해 구문 분석 시간이 아닌 실행 시간에 변수가 확장됩니다.
- /r에 대해- 파일을 반복합니다(반복 하위 폴더).
- 세트- CMD 환경 변수를 표시, 설정 또는 제거합니다. SET로 변경한 내용은 현재 CMD 세션 동안에만 유지됩니다.
- 세트로컬- 배치 파일에서 환경 변수의 가시성을 제어하는 옵션을 설정합니다.
답변2
간단히 함수를 호출하여 다른 해결책을 찾았습니다.
FOR /R dirname %%F in (*.*) DO call :Setfiletime %%F
goto End
:Setfiletime
SET FNAME=%~n1
echo %FNAME%
SET MM=%FNAME:~0,2%
SET DD=%FNAME:~2,2%
SET YY=%FNAME:~4,2%
nircmd.exe setfiletime %1 "%DD%-%MM%-20%YY%" "%DD%-%MM%-20%YY%"
:goto :eof
:End
모든 도움을 주신 모든 분들께 감사드립니다.