Windows 2008: 파일을 압축하여 백업 서버에 복사하려고 합니다. 명령줄/배치 파일을 사용하고 결과를 로그 파일에 기록합니다. 이제 시간도 기록하고 싶습니다.각파일이 루프되었습니다.
backupZipCopy.bat 배치 파일:
setlocal enabledelayedexpansion
echo starting at %date% %time%>>c:\backup\resuZip.log
d:
cd \myDirectoryToBackup
FOR %%i IN (*.nsf) DO (
echo %date% %time%>>c:\backup\resuZip.log
"C:\Program Files\7-Zip\7z.exe" -bd u "\\backupServer\myBackup\%%~ni.zip" "%%~fi">>c:\backup\resuZip.log
)
내 문제:시간은같은모든 배치 기간(배치 작업이 완료되는 시간) 동안시작했다각 루프에서 실시간을 예상했을 때). 나는 이미 도움이 되지 않는 setlocalenabledelayedexpansion을 지정했습니다(그래서 이것이 필요한가 아닌가?).
NB timethis는 각 루프에 시간이 필요하기 때문에 문제를 해결하지 못합니다. NB2 창 스케줄러에서 이 배치를 호출합니다.
답변1
문제는 해당 라인( ( )
블록이 단일 라인으로 구문 분석됨)에서 모든 %foo%
변수가 루프를 실행하기 전에 한 번만 평가된다는 것입니다 for
.
옵션enabledelayedexpansion
하다돕다. 그러나 일반적인 변수 구문에 대한 구문 분석 규칙은 변경되지 않습니다 %foo%
. 대신, 구분 기호로 사용하는 새로운 것을 도입합니다 !
.
for %%i in (*.nsf) do (
echo !date! !time!>> C:\backup\resuZip.log
)
그러나 지연된 확장은 %foo%
변수가 확장된 후에 발생하므로 매우 주의해야 합니다. 따라서 %
변수에 느낌표가 있으면 예기치 않은 출력이 발생합니다 . cmd.exe 구문 분석 규칙은 때때로 완전히 고통스럽습니다.
스크립트에 다른 언어를 사용하는 것이 좋습니다. PowerShell은 최신 Windows 릴리스의 일부이고 다양한 Windows Server 구성 요소를 관리하기 위한 도구가 있다는 점을 고려하면 좋은 선택이 될 것입니다.