2016-08-18 2 views
0

우리 모두 알고 있듯이, 배치 파일을 사용하여 아카이브를 폴더로 이동할 때, 같은 이름의 다른 아카이브가있는 경우 배치 스크립트는 이전 아카이브를 대체합니다.배치 - 왜 아카이브의 이름이 변경되지 않습니까?

나는 아카이빙 시스템을 만들고 있기 때문에 중요한 데이터가 아카이브 과정에서 손실 될 수 있으므로이 문제를 해결하는 방법에 대한 정보를 얻으려면 지금 티켓을 준비했습니다.

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 나는 아직도 왜 코드가 작동하지 않았다, 이해, 그래서하지 않았다 : 사용자, elzooilogico라는 이름의이를 사용하는 대신 이동 명령의 제안

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. 

: 여기 내 테스트 코드 그것을 약간 다시 만들고, 여기에 내가 생각해내는 것이 있습니다. 아카이브가 이미 존재하는 경우

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 : C : \ Users \ PP_lemev \ Desktop \ 새 폴더 \ 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 
관련 문제