來自北極的企鵝 ![]() | 請教關於DOS批次檔和7-ZIP批次壓縮的問題 1.小弟參考GOOGLE上的介紹,寫出兩個用於日常備份的批次檔 其中有兩個地方怎麼改都無法順利執行.. 例如: %7z% a -mx=9 -t7z D:\X\A.idm.%date:~0,4%%date:~5,2%%date:~8,2%.7z D:\X\A.idm.200????? if errorlevel 0 "GOTO RESULT && DEL /Q D:\X\A.idm.200?????" if not errorlevel 0 SET sub_step=3 先用7Z壓縮每日備份的檔案(EX: D:\X\A.idm.20080729....) 假如成功則執行刪除原檔和輸出結果到LOG檔,失敗則是輸出問題到LOG檔 其中DEL /Q D:\X\A.idm.200????? 不知為何一直無法正確執行,參考網上教學加上""一樣無法執行?? 而輸出到LOG檔的部份: ---------------------------------------------------- ------------- 20080729 個人資料備份檔 -------------- ---------------------------------------------------- 開始備份時間: 下午 01:07 ---------------------------------------------------- -------- 壓縮 MSN表情符號、大頭貼、動畫快遞 -------- ---------------------------------------------------- ---------------------------------------------------- ---------------- 輸出 備份完成 時間 ---------------- ---------------------------------------------------- 結束備份時間: 下午 01:07 ---------------------------------------------------- 壓縮完成!! ︿︿︿︿︿︿ 壓縮結果不知為何會跑到最下方,應該如何改成如下方所示呢?? ---------------------------------------------------- -------- 壓縮 MSN表情符號、大頭貼、動畫快遞 -------- ---------------------------------------------------- 壓縮完成!! ---------------------------------------------------- ----------- 壓縮 密碼管理資料(2個檔案)----------- ---------------------------------------------------- 壓縮完成!! ---------------------------------------------------- ---------------- 輸出 備份完成 時間 ---------------- ---------------------------------------------------- 結束備份時間: 下午 01:07 ---------------------------------------------------- 2.關於7-ZIP批次壓縮的部份,GOOGLE很久找到一個批次檔 @echo off set a=c:\program files\7-zip\7z.exe for %%a in (%*) do ( dir /a %%a|findstr "DIR" >nul 2>nul && ( "%a%" a -tzip "%%~dpa%%~na.zip" "%%~a\*" ) || ( "%a%" a -tzip "%%~dpa%%~na.zip" %%a ) ) 存成批次檔放到SendTo裡,是可以正確的批次壓縮成ZIP檔 可小弟改成如下所示后: @echo off set a=C:\Program Files\7-Zip\7z.exe for %%a in (%*) do ( dir /a %%a|findstr "DIR" >nul 2>nul && ( "%a%" a -t7z "%%~dpa%%~na.7z" "%%~a\*" ) || ( "%a%" a -t7z "%%~dpa%%~na.7z" %%a ) ) 檔少時可以正確執行,一多(我是一次壓一百多個)就會出現錯誤,不知是哪裡出錯呢? 以上兩個問題還請各位電腦達人幫忙解惑,感激不盡 ORZ 附上兩個資料備份的批次檔,也請大伙不吝幫忙改善一下 ^^ =============================== @echo off SET month_log="D:\LOG\每月資料備份壓縮_%date:~0,4%%date:~5,2%%date:~8,2%.log" SET 7Z="C:\program Files\7-zip\7z" SET /a run_step=0 SET sub_step=0 if exist %month_log% del %month_log% GOTO CHOICE :CHOICE if "%run_step%"=="0" GOTO STEP_0 if "%run_step%"=="1" GOTO STEP_1 if "%run_step%"=="2" GOTO STEP_2 if "%run_step%"=="3" GOTO STEP_3_1 if "%run_step%"=="4" GOTO STEP_4_1 if "%run_step%"=="5" GOTO STEP_5 if "%run_step%"=="6" GOTO STEP_6 if "%run_step%"=="7" GOTO END GOTO END :STEP_0 SET run_step=0 ECHO ---------------------------------------------------- >> %month_log% ECHO ------------- %date:~0,4%%date:~5,2%%date:~8,2% 個人資料備份檔 -------------- >> %month_log% ECHO ---------------------------------------------------- >> %month_log% echo 開始備份時間: >> %month_log% TIME /T >> %month_log% GOTO STEP_1 :STEP_1 SET /a run_step=1 ECHO ---------------------------------------------------- >> %month_log% ECHO -------- 壓縮 MSN表情符號、大頭貼、動畫快遞 -------- >> %month_log% ECHO ---------------------------------------------------- >> %month_log% %7z% a -mx=9 -t7z D:\BACKUP\MSN\[email protected].%date:~0,4%%date:~5,2%%date:~8,2%.7z D:\BACKUP\MSN\[email protected] if errorlevel 0 "GOTO RESULT && RD /S/Q D:\BACKUP\MSN\[email protected]\" if not errorlevel 0 GOTO RESULT GOTO STEP_2 :STEP_2 SET /a run_step=2 ECHO ---------------------------------------------------- >> %month_log% ECHO ------------- 壓縮 記帳資料(1個檔案)------------- >> %month_log% ECHO ---------------------------------------------------- >> %month_log% %7z% a -mx=9 -t7z D:\BACKUP\Charge\MyMoneyData.mdb.%date:~0,4%%date:~5,2%%date:~8,2%.7z D:\BACKUP\Charge\MyMoneyData.mdb.200????? if errorlevel 0 "GOTO RESULT && DEL /Q D:\BACKUP\Charge\MyMoneyData.mdb.200?????" if not errorlevel 0 GOTO RESULT GOTO STEP_3_1 :STEP_3_1 SET /a run_step=3 ECHO ---------------------------------------------------- >> %month_log% ECHO ----------- 壓縮 密碼管理資料(2個檔案)----------- >> %month_log% ECHO ---------------------------------------------------- >> %month_log% %7z% a -mx=9 -t7z D:\BACKUP\PassWord\my.idm.%date:~0,4%%date:~5,2%%date:~8,2%.7z D:\BACKUP\PassWord\my.idm.200????? if errorlevel 0 "GOTO RESULT && DEL /Q D:\BACKUP\PassWord\my.idm.200?????" if not errorlevel 0 SET sub_step=3 GOTO STEP_3_2 :STEP_3_2 SET sub_step= %7z% a -mx=9 -t7z D:\BACKUP\PassWord\my.apw.%date:~0,4%%date:~5,2%%date:~8,2%.7z D:\BACKUP\PassWord\my.apw.200????? if errorlevel 0 "GOTO RESULT && DEL /Q D:\BACKUP\PassWord\my.apw.200?????" if not errorlevel 0 GOTO RESULT GOTO STEP_4_1 :STEP_4_1 SET /a run_step=4 ECHO ---------------------------------------------------- >> %month_log% ECHO ------------ 壓縮 模擬器資料(2個檔案)------------ >> %month_log% ECHO ---------------------------------------------------- >> %month_log% %7z% a -mx=9 -t7z D:\BACKUP\Game\OfflineList_conf.ini.%date:~0,4%%date:~5,2%%date:~8,2%.7z D:\BACKUP\Game\OfflineList_conf.ini.200????? if errorlevel 0 "GOTO RESULT && DEL /Q D:\BACKUP\Game\OfflineList_conf.ini.200?????" if not errorlevel 0 SET sub_step=4 GOTO STEP_4_2 :STEP_4_2 SET sub_step= %7z% a -mx=9 -t7z D:\BACKUP\Game\clrmamepro_cmpro.ini.%date:~0,4%%date:~5,2%%date:~8,2%.7z D:\BACKUP\Game\clrmamepro_cmpro.ini.200????? if errorlevel 0 "GOTO RESULT && DEL /Q D:\BACKUP\Game\clrmamepro_cmpro.ini.200?????" if not errorlevel 0 GOTO RESULT GOTO STEP_5 :STEP_5 SET /a run_step=5 ECHO ---------------------------------------------------- >> %month_log% ECHO ------------ 壓縮 hosts 檔案(1個檔案)------------ >> %month_log% ECHO ---------------------------------------------------- >> %month_log% %7z% a -mx=9 -t7z D:\BACKUP\NET\hosts.%date:~0,4%%date:~5,2%%date:~8,2%.7z D:\BACKUP\NET\hosts if errorlevel 0 "GOTO RESULT" & "DEL /Q D:\BACKUP\NET\hosts" if not errorlevel 0 GOTO RESULT GOTO STEP_6 :STEP_6 SET /a run_step=6 ECHO ---------------------------------------------------- >> %month_log% ECHO ---------------- 輸出 備份完成 時間 ---------------- >> %month_log% ECHO ---------------------------------------------------- >> %month_log% ECHO 結束備份時間: >> %month_log% TIME /T >> %month_log% ECHO ---------------------------------------------------- >> %month_log% set /a run_step=%run_step% + 1 GOTO END :RESULT if errorlevel 0 ECHO 壓縮完成!! >> %month_log% if errorlevel 1 ECHO 檔案被鎖住,無法壓縮!! >> %month_log% if errorlevel 2 ECHO 發生嚴重錯誤!! >> %month_log% if errorlevel 7 ECHO 壓縮命令列錯誤!! >> %month_log% if errorlevel 8 ECHO 記憶體不足!! >> %month_log% if errorlevel 255 GOTO ECHO 使用者中斷!! >> %month_log% set /a run_step=%run_step% + 1 IF "%sub_step%"=="3" GOTO STEP_3_2 IF "%sub_step%"=="4" GOTO STEP_4_2 GOTO CHOICE :END SET month_log= SET 7Z= SET run_step= SET sub_step= ================================ @echo off SET day_log="D:\LOG\每日資料備份_%date:~0,4%%date:~5,2%%date:~8,2%.log" IF EXIST %day_log% del %day_log% ECHO ---------------------------------------------------- >> %day_log% ECHO ------------- %date:~0,4%%date:~5,2%%date:~8,2% 個人資料備份檔 -------------- >> %day_log% ECHO ---------------------------------------------------- >> %day_log% echo 開始備份時間: >> %day_log% TIME /T >> %day_log% ECHO ---------------------------------------------------- >> %day_log% ECHO -------- 備份 MSN表情符號、大頭貼、動畫快遞 -------- >> %day_log% ECHO ---------------------------------------------------- >> %day_log% RD /S/Q D:\BACKUP\MSN\[email protected]\ XCOPY "C:\Documents and Settings\my\Local Settings\Application Data\Microsoft\Messenger\[email protected]\ObjectStore" "D:\BACKUP\MSN\[email protected]\ObjectStore" /D /H /I /S /Y ECHO 備份完成!! >> %day_log% ECHO ---------------------------------------------------- >> %day_log% ECHO ------------- 備份 記帳資料(1個檔案)------------- >> %day_log% ECHO ---------------------------------------------------- >> %day_log% ECHO D:\BACKUP\Charge\MyMoneyData.mdb >> %day_log% COPY D:\BACKUP\Charge\MyMoneyData.mdb D:\BACKUP\Charge\MyMoneyData.mdb.%date:~0,4%%date:~5,2%%date:~8,2% /y >> %day_log% ECHO ---------------------------------------------------- >> %day_log% ECHO ----------- 備份 密碼管理資料(2個檔案)----------- >> %day_log% ECHO ---------------------------------------------------- >> %day_log% ECHO D:\BACKUP\PassWord\my.idm >> %day_log% COPY D:\BACKUP\PassWord\my.idm D:\BACKUP\PassWord\my.idm.%date:~0,4%%date:~5,2%%date:~8,2% /y >> %day_log% ECHO D:\BACKUP\PassWord\my.apw >> %day_log% COPY D:\BACKUP\PassWord\my.apw D:\BACKUP\PassWord\my.apw.%date:~0,4%%date:~5,2%%date:~8,2% /y >> %day_log% ECHO ---------------------------------------------------- >> %day_log% ECHO ------------ 備份 模擬器資料(2個檔案)------------ >> %day_log% ECHO ---------------------------------------------------- >> %day_log% ECHO D:\Share\_Emu_\OfflineList\conf.ini >> %day_log% COPY D:\Share\_Emu_\OfflineList\conf.ini D:\BACKUP\Game\OfflineList_conf.ini.%date:~0,4%%date:~5,2%%date:~8,2% /y >> %day_log% ECHO D:\Share\_Emu_\clrmamepro\cmpro.ini >> %day_log% COPY D:\Share\_Emu_\clrmamepro\cmpro.ini D:\BACKUP\Game\clrmamepro_cmpro.ini.%date:~0,4%%date:~5,2%%date:~8,2% /y >> %day_log% ECHO ---------------------------------------------------- >> %day_log% ECHO ------------ 備份 hosts 檔案(1個檔案)------------ >> %day_log% ECHO ---------------------------------------------------- >> %day_log% ECHO C:\WINDOWS\system32\drivers\etc\hosts >> %day_log% COPY C:\WINDOWS\system32\drivers\etc\hosts D:\BACKUP\NET\ /Y >> %day_log% ECHO ---------------------------------------------------- >> %day_log% ECHO ---------------- 輸出 備份完成 時間 ---------------- >> %day_log% ECHO ---------------------------------------------------- >> %day_log% ECHO 結束備份時間: >> %day_log% TIME /T >> %day_log% ECHO ---------------------------------------------------- >> %day_log% =================================== |
回覆 |
あなたの家に行く | goto 不能這樣做。無論是寫批次檔還是寫程式,在非必要的情況下,不要用 goto 指令。 |
回覆 |
|
XML | RSS 2.0 | RSS |
本論壇所有文章僅代表留言者個人意見,並不代表本站之立場,討論區以「即時留言」方式運作,故無法完全監察所有即時留言,若您發現文章可能有異議,請 email :[email protected] 處理。