2013-10-01 33 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!但那會輸出!索引!與驚歎號。我肯定錯過了什麼。 –

+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!" 
)