2013-10-01 3 views
2

파일을 백업 폴더에 복사해야합니다. 파일 이름이 이미 사용 된 경우 색인이 붙습니다. 나는 그것이 작동하도록 할 수 없습니다. 변수 tmpfile은 결코 인덱스 카운터를 운반하지 않는 것 같습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 스크립트는 다음과 같습니다.무료 일괄 파일 이름을 찾을 수있는 Windows 일괄 스크립트

감사합니다, 숀

set srcdir=%~dp0 
set oldxladir=%srcdir%OldXLAs 

if not exist %oldxladir% mkdir %oldxladir% 

set pathstart=C:\Documents and Settings\ 
set username=%USERNAME% 
set pathend=\Application Data\Microsoft\Excel\XLSTART\ 
set pattern=groovy*.xla 

set xladir=%pathstart%%username%%pathend% 
set xlapattern="%pathstart%%username%%pathend%%pattern%" 

for %%f in (%xlapattern%) do (
    set filename=%%~nxf 
    set srcfile=%xladir%%filename% 
    set destfile=%oldxladir%\%filename% 
    set tmpfile=%destfile% 

    set /a index=1 
    :loop 
    if exist tmpfile (
     set /a index+=1 
     echo %index% 
     set tmpfile=%destfile%%index% 
     goto :loop 
    ) 

    echo %tmpfile% 
    move "%srcfile%" "%tmpfile%" 
) 
+0

확인'SETLOCAL ENABLEDELAYEDEXPANSION'. –

+0

이 방법이 유용 할 수 있지만 불행히도 도움이되지 않습니다. echo! % index %를 echo! index로 변경했습니다! 그러나 그것은 출력 할 것입니다! index! 느낌표와 함께. 나는 뭔가를 놓치고 있어야합니다. –

+0

당신은 명시 적으로'SETLOCAL ENABLEDELAYEDEXPANSION' (LS_dev의 답 참조)을 명시 할 필요가있다. – SvenS

답변

2
SETLOCAL ENABLEDELAYEDEXPANSION 
set srcdir=%~dp0 
set oldxladir=%srcdir%OldXLAs 

if not exist %oldxladir% mkdir %oldxladir% 

set pathstart=C:\Documents and Settings\ 
set username=%USERNAME% 
set pathend=\Application Data\Microsoft\Excel\XLSTART\ 
set pattern=groovy*.xla 

set xladir=%pathstart%%username%%pathend% 
set xlapattern="%pathstart%%username%%pathend%%pattern%" 

for %%f in (%xlapattern%) do (
    set filename=%%~nxf 
    set srcfile=%xladir%!filename! 
    set destfile=%oldxladir%\!filename! 
    set tmpfile=!destfile! 

    set /a index=1 
    :loop 
    if exist !tmpfile! (
     set /a index+=1 
     echo !index! 
     set tmpfile=!destfile!!index! 
     goto :loop 
    ) 

    echo !tmpfile! 
    move "!srcfile!" "!tmpfile!" 
) 
관련 문제