nircmd.exe를 사용하고 일괄 for 루프에서 파일 이름 %~nF를 설정하는 방법

nircmd.exe를 사용하고 일괄 for 루프에서 파일 이름 %~nF를 설정하는 방법

각 파일 이름을 반복하고 문자열의 일부를 사용하며 생성 날짜와 수정 날짜를 설정하는 배치 파일을 작성하려고 합니다. 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작동한다고 생각되면 제거하십시오 .
  • 루프 내부 !대신 사용할 수 있는 장소가 필요합니다 (이것이 바로 그 목적입니다. 구문 분석 시가 아닌 실행 시에 변수를 확장할 수 있습니다).%forenabledelayedexpansion

다음 배치 파일로 시작합니다(주요 실수는 수정했습니다).

@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

모든 도움을 주신 모든 분들께 감사드립니다.

관련 정보