2016-08-18 82 views
0

所以,衆所周知,當我們使用批處理文件將歸檔文件移動到文件夾時,存在另一個同名的歸檔文件,批處理腳本將替換舊的歸檔文件。批處理 - 爲什麼檔案沒有被重命名?

由於我正在進行存檔系統,這非常糟糕,因爲重要數據可能會在歸檔過程中丟失,因此,我在SO中創建了票據,以獲取有關如何解決此問題的信息。這裏是我的測試代碼:

set year=%DATE:~6,4% 

if not exist "V:\01_%YEAR%" mkdir "V:\01_%YEAR%" - Creates folder 01_2016 
for /d %%X in (01_%YEAR%) do "C:\Program Files\7-Zip\7z.exe" a "%%X.7z" "%%X\" - Archivates folder 
MOVE "V:\01_%YEAR%.7z" "Z:\" - moves Archive. 

用戶名爲elzooilogico,建議,而不是移動命令,使用此:

set "last=0" 
set "filename=Z:\01_%YEAR%.7z" 

if exist "Z:\01_%YEAR%.7z" (
    for /R %%i in ("Z:\01_%YEAR%(*).7z") do (
     for /F "tokens=2 delims=(^)" %%a in ("%%i") do set "last=%%a" 
    ) 
    set/a last+=1 
    set "filename=Z:\01_%YEAR%(%last%).7z"  
)  

MOVE "V:\01_%YEAR%.7z" "%filename%" 

Unfortunetely我還是不明白,爲什麼代碼無法工作,所以我重拍一下,這就是我想出來的。

set YEAR=%DATE:~6,4% 
set filename=C:\Users\PP_lemev\Desktop\New folder\01_%YEAR%.7z 

cd /d C:\Users\PP_lemev\Desktop\New folder 
if not exist "C:\Users\PP_lemev\Desktop\New folder\01_%YEAR%" mkdir "C:\Users\PP_lemev\Desktop\New folder\01_%YEAR%" 
for /d %%X in (01_%YEAR%) do "C:\Program Files\7-Zip\7z.exe" a "%%X.7z" "%%X\" 
    if exist "C:\Users\PP_lemev\Desktop\New folder\vairis\01_%YEAR%.7z" (
     for /R %%i in ("C:\Users\PP_lemev\Desktop\New folder\01_%YEAR%(*).7z") do (
      for /F "tokens=2 delims=(^)" %%a in ("%%i") do set "last=%%a" 
    ) 
    set/a last+=1 
    set "C:\Users\PP_lemev\Desktop\New folder\01_%YEAR%(%last%).7z"  
)  
MOVE "%filename%" "C:\Users\PP_lemev\Desktop\New folder\vairis" 

有人請向我解釋一下,爲什麼存檔名稱在腳本檢查後沒有被重命名,如果存檔已經存在?

問候,Vairis

+2

[調試您的批處理文件(http://www.robvanderwoude.com/battech_debugging.php) – DavidPostill

+0

請你「show」,如何調試只重命名部分代碼?我不明白調試過程,從你給我的鏈接。 – Vairis

+1

由於該鏈接建議查看您正在使用的變量的值。提示#1:'filename'沒有被定義。提示#2:'set「C:\ Users \ PP_lemev \ Desktop \ New folder \ 01_%YEAR%(%last%)。7z」'不會做你想做的事...... – DavidPostill

回答

1

OK,新方法

@echo off 
SetLocal EnableDelayedExpansion 

set/a last=1 
set "YEAR=%DATE:~6,4%" 
set "myFolder=C:\Users\PP_lemev\Desktop\New folder\vairis" 
set "filename=%myFolder%\01_%YEAR%.7z" 

if exist "%myFolder%\01_%YEAR%.7z" (
    for /R %%i in ("%myFolder%\01_%YEAR%(*).7z") do set/a last+=1 
    set "last=000!last!" 
    set "filename=%myFolder%\01_%YEAR%(!last:~-4!).7z"  
)  

for /d %%X in (01_%YEAR%) do "C:\Program Files\7-Zip\7z.exe" a "%filename%" "%%X\" 

endlocal