2011-03-22 2 views
1

각 사무실 (office_list.txt)에 대해 가지고있는 사용자 목록 (office_id_list_%YY_MM_DD%\%%)을 검토하고 새로운 파일 날짜 (%3)가 발견되었습니다. 아래 코드는 작동하지 않아서 errorlevel을 반향시키고 항상 -1073741510 (Windows 2003 시스템에서 작업 중임)으로 나타났습니다. 궁극적으로, 나는 주어진 날짜 이후에 수정되지 않은 사용자 홈 디렉토리 (사무실별로 조직 된)를 식별하려고 시도하고있다. 모든 의견을 크게 기뻐할 것입니다.에 임베드 된 forfiles 명령의 리턴 코드를 이해하지 못함


for /f "tokens=1 delims= " %%i in (U:\sysmon\u_cleanup\office_list.txt) do (
    if not exist u:\sysmon\u_cleanup\results\%%i mkdir u:\sysmon\u_cleanup\results\%%i 
    for /f "tokens=1 delims= " %%j in (U:\sysmon\u_cleanup\results\office_lists_%YY_MM_DD%\%%i_dir_list_%YY_MM_DD%_final.txt) do (
    forfiles /P %1%%i\%%j /S /D +%3 /C "cmd /c if %errorlevel% == 0 echo ** Do not Archive - Found files modified after %3 > U:\sysmon\u_cleanup\results\%%i\%%j_%YY_MM_DD%.txt" 
) 
) 

답변

0

아마, 가장 큰 문제는 당신의 명령 중 하나를 실행하기 전에 그것은 오류 수준을 확장, 부분 cmd /c if %errorlevel% == 0이다.

일반적으로 지연된 확장이 선택 사항이지만 새로운 cmd 컨텍스트에 있기 때문에 여기서는 Joey가 언급 한 것처럼/V : on으로 작동하지 않습니다. 여기

전체 블록이 처음 구문 분석됩니다 그래서 만약 당신이 이런 식 cmd /c if %%errorlevel%% == 0을 사용할 수는 부분은 cmd /c if %errorlevel% == 0로 확대되고, cmd /c가 실행될 때이, 두 번째로 확장됩니다.

그리고 당신은

set "officePath=U:\sysmon\u_cleanup" 
set "officeDatePath=%officePath%\results\office_lists_%YY_MM_DD%" 
for /f "tokens=1 delims= " %%i in ("%officePath%\office_list.txt") do (
    if not exist "%officePath%\results\%%i" (
     mkdir "%officePath%\results\%%i" 
    ) 
    for /f "tokens=1 delims= " %%j in ("%officeDatePath%\%%i_dir_list_%YY_MM_DD%_final.txt") do (
     forfiles /P %1%%i\%%j /S /D +%3 /C "cmd /c if %%errorlevel%% == 0 echo ** Do not Archive - Found files modified after %3 > %officePath%\results\%%i\%%j_%YY_MM_DD%.txt" 
    ) 
) 
+0

감사합니다. 또한 일했다. 코드 미화 도움말 주셔서 감사합니다. 가능한 한 간소화하고 싶지만 시도 할 때 더 많은 이슈를 소개합니다. 지연된 확장이나 어떻게 dos가 변수를 해석하는지에 대한 좋은 참고 자료가 있습니까 (아마도 로딩 타임과 런타임 토론). 어느 쪽이든, 많이 감사합니다. – jim

+0

@jim : 초보자와 전문가 [Dostips.com] (http://www.dostips.com), 일괄 처리 방법 (전문가) 이해 [cmd가 한 행을 구문 분석하는 방법을 % vs %% var] (http : //stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/4095133#4095133) – jeb

1

cmd/V:on 옵션을 추가하는 대신 지연 확장 켜집니다 %errorlevel%!errorlevel!를 사용하는 코드를 조금 아름답게 수 있습니다.

+0

감사합니다. 잘됐다. – jim

관련 문제