![]() |
||
|
Basic Member
加入日期: May 2004 您的住址: ROC
文章: 26
|
請教關於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 |
|||||||
|
|
|
Basic Member
加入日期: May 2004 您的住址: ROC
文章: 26
|
附上兩個資料備份的批次檔,也請大伙不吝幫忙改善一下 ^^
=============================== @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% =================================== |
||
|
|
|
Junior Member
![]() ![]() ![]() 加入日期: Jan 2003 您的住址: Shattrath City
文章: 949
|
以我的經驗來說.
應該是 %date% 的格式出了問題. 我的 date format 是設成 USA 但是我一 echo 你的 %date% format 就出現了 7/9 echo %date=~0,4%%date:~5,2%%date:~8,2% MS 的 Fire structure 不可以用 / 去命名 我的做法是 你需要 FORFILES 這個檔案 代碼:
FORFILES /P "C:\FROM_FOLDER" /M *.tif /D -90 /c "cmd /c C:\Backup\Job.Scripts\7z\7za a \\TO_SERVER\TO_FOLDER\Backup.7z @file" RENAME \\TO_SERVER\TO_FOLDER\Backup.7z %date:~-4,4%%date:~-10,2%%date:~-7,2%.7z FORFILES /P "C:\FROM_FOLDER" /M *.tif /D -90 /c "cmd /c del @file" 第一行: 用 Forfiles 找出 多過 90 天的 tif 檔 然後用 7z 壓縮成 Backup.7z 第二行: 把 Backup.7z 重新命名成今天的日期 第三行: 用 Forfiles 刪除 多過 90 天的 tif 檔 然後把這個 BAT 檔放到 Scheduled Tasks 每三個月跑一次 這是針對 Window 2003 SP2 所寫的! |
|
|
|
Junior Member
![]() ![]() ![]() 加入日期: Jan 2003 您的住址: Shattrath City
文章: 949
|
另外:
>> 其中DEL /Q D:\X\A.idm.200????? 不知為何一直無法正確執行<< :STEP_5 if errorlevel 0 "GOTO RESULT" & "DEL /Q D:\BACKUP\NET\hosts" 他和其他的 STEP 不太一樣.. |
|
|
|
Basic Member
加入日期: May 2004 您的住址: ROC
文章: 26
|
引用:
date的部份應該是ok的,因為可以正確抓到如:20080730 至於FORFILES的部份,小弟會再試試看 ^^ 引用:
因為路徑太長,所以帖上省略成D:\X\,批次檔內的倒是正確的 先感謝PAN_PAN大大的回覆 另外,小弟剛用修改過的批次檔跑過後,出現下面的問題 dos視窗: c:\>aa.bat 系統找不到指定的路徑。 系統找不到指定的路徑。 系統找不到指定的路徑。 系統找不到指定的路徑。 系統找不到指定的路徑。 紀錄檔(每月資料備份壓縮_20080730.log) ---------------------------------------------------- ------------- 20080730 個人資料備份檔 -------------- ---------------------------------------------------- 開始備份時間: 上午 12:03 ---------------------------------------------------- -------- 壓縮 MSN表情符號、大頭貼、動畫快遞 -------- ---------------------------------------------------- 壓縮完成!! 檔案被鎖住,無法壓縮!! 發生嚴重錯誤!! ---------------------------------------------------- ------------- 壓縮 記帳資料(1個檔案)------------- ---------------------------------------------------- 壓縮完成!! 檔案被鎖住,無法壓縮!! 發生嚴重錯誤!! ---------------------------------------------------- ----------- 壓縮 密碼管理資料(2個檔案)----------- ---------------------------------------------------- 壓縮完成!! 檔案被鎖住,無法壓縮!! 發生嚴重錯誤!! ---------------------------------------------------- ------------ 壓縮 模擬器資料(2個檔案)------------ ---------------------------------------------------- 壓縮完成!! 檔案被鎖住,無法壓縮!! 發生嚴重錯誤!! ---------------------------------------------------- ------------ 壓縮 hosts 檔案(1個檔案)------------ ---------------------------------------------------- 壓縮完成!! 檔案被鎖住,無法壓縮!! 發生嚴重錯誤!! ---------------------------------------------------- ---------------- 輸出 備份完成 時間 ---------------- ---------------------------------------------------- 結束備份時間: 上午 12:03 ---------------------------------------------------- 出現更奇怪的問題.....汗 修改過的批次檔: @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 mame="%date:~0,4%%date:~5,2%%date:~8,2%.7z" SET /a run_step="10" if exist %month_log% del %month_log% GOTO CHOICE :CHOICE if "%run_step%"=="10" GOTO STEP_0 if "%run_step%"=="11" GOTO STEP_1 if "%run_step%"=="12" GOTO STEP_2 if "%run_step%"=="13" GOTO STEP_3_1 if "%run_step%"=="14" GOTO STEP_4_1 if "%run_step%"=="15" GOTO STEP_5 if "%run_step%"=="16" GOTO STEP_6 if "%run_step%"=="17" GOTO END 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%"=="13" GOTO STEP_3_2 IF "%sub_step%"=="14" GOTO STEP_4_2 GOTO CHOICE :STEP_0 SET run_step=10 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="11" ECHO ---------------------------------------------------- >> %month_log% ECHO -------- 壓縮 MSN表情符號、大頭貼、動畫快遞 -------- >> %month_log% ECHO ---------------------------------------------------- >> %month_log% %7z% a -mx=9 -t7z D:\BACKUP\MSN\[email protected].%mame% 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="12" ECHO ---------------------------------------------------- >> %month_log% ECHO ------------- 壓縮 記帳資料(1個檔案)------------- >> %month_log% ECHO ---------------------------------------------------- >> %month_log% %7z% a -mx=9 -t7z D:\BACKUP\Charge\MyMoneyData.mdb.%mame% 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="13" ECHO ---------------------------------------------------- >> %month_log% ECHO ----------- 壓縮 密碼管理資料(2個檔案)----------- >> %month_log% ECHO ---------------------------------------------------- >> %month_log% %7z% a -mx=9 -t7z D:\BACKUP\PassWord\my.idm.%mame% 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="13" GOTO STEP_3_2 :STEP_3_2 SET sub_step= %7z% a -mx=9 -t7z D:\BACKUP\PassWord\my.apw.%mame% 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="14" ECHO ---------------------------------------------------- >> %month_log% ECHO ------------ 壓縮 模擬器資料(2個檔案)------------ >> %month_log% ECHO ---------------------------------------------------- >> %month_log% %7z% a -mx=9 -t7z D:\BACKUP\Game\OfflineList_conf.ini.%mame% 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="14" GOTO STEP_4_2 :STEP_4_2 SET sub_step= %7z% a -mx=9 -t7z D:\BACKUP\Game\clrmamepro_cmpro.ini.%mame% 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="15" ECHO ---------------------------------------------------- >> %month_log% ECHO ------------ 壓縮 hosts 檔案(1個檔案)------------ >> %month_log% ECHO ---------------------------------------------------- >> %month_log% %7z% a -mx=9 -t7z D:\BACKUP\NET\hosts.%mame% 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="16" 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 :END SET month_log= SET 7Z= SET run_step= SET sub_step= |
||
|
|
|
Junior Member
![]() ![]() ![]() 加入日期: Jan 2003 您的住址: Shattrath City
文章: 949
|
我的意思是說
:STEP_5 if errorlevel 0 "GOTO RESULT" & "DEL /Q D:\BACKUP\NET\hosts" 但是你其他的 STEPs :STEP_2 if errorlevel 0 "GOTO RESULT && DEL /Q D:\BACKUP\Charge\MyMoneyData.mdb.200?????" 看的出來嗎? 我不知道要怎麼解釋!! 另外找不到 系統找不到指定的路徑, 可能是的 SET month_log= SET 7Z= SET run_step= SET sub_step= 這些東西寫錯地方了 此文章於 2008-07-30 04:35 AM 被 PAN_PAN 編輯. |
|
|
|
Master Member
![]() ![]() ![]() ![]() 加入日期: Apr 2001 您的住址: 高雄
文章: 2,247
|
看得眼花撩亂…
建議您可以仿照老式的程式設計技巧,設定偵錯點。 在批次檔內,先把echo off那一行去掉(不去掉就看不到哪一行指令正在執行),然後加入pause指令(可以按任意鍵再繼續),來仔細瞧一瞧,倒底是那一行執行出了問題,再鎖定那一行的語法、使用到的參數來推敲錯誤所在。 Good Luck
__________________
簽名檔真是礙眼…還是讓版面乾淨點吧! |
|
|
|
Basic Member
加入日期: May 2004 您的住址: ROC
文章: 26
|
引用:
&&的部份小弟已經改用||來取代,目前已可以正確刪除檔案了 至於底下set的部份則全部刪除掉了 ^^ 引用:
已改成@echo on了,偵錯點??....額,有點不明白 早上有試著加入pause指令,已經抓出幾個問題出來.. 之前貼的批次檔是太亂了,已加上注記便於查看 ^^ 再次大改后,情況有所改善,不過還是有些問題 1.dos視窗內跑完批次檔后,發現7z完全不會執行,會出現如下的錯誤: ============================ C:\>Z\BACKUP\PassWord\my.idm.20080730.7z D:\BACKUP\PassWord\my.idm.200????? 系統找不到指定的路徑。 ============================ 可若將該行剪下單獨執行卻又可以正確跑完,不知是何緣故?! @@" 2.另外紀錄檔的部份也有問題,7z沒執行成功卻出現一堆錯誤&正確的代碼?! ---------------------------------------------------- ------------- 20080730 個人資料備份檔 -------------- ---------------------------------------------------- 開始備份時間: 上午 09:47 ---------------------------------------------------- -------- 壓縮 MSN表情符號、大頭貼、動畫快遞 -------- ---------------------------------------------------- 發生嚴重錯誤!! 檔案被鎖住,無法壓縮!! 壓縮完成!! ---------------------------------------------------- ------------- 壓縮 記帳資料(1個檔案)------------- ---------------------------------------------------- 發生嚴重錯誤!! 檔案被鎖住,無法壓縮!! 壓縮完成!! ---------------------------------------------------- ----------- 壓縮 密碼管理資料(2個檔案)----------- ---------------------------------------------------- 發生嚴重錯誤!! 檔案被鎖住,無法壓縮!! 壓縮完成!! 發生嚴重錯誤!! 檔案被鎖住,無法壓縮!! 壓縮完成!! ---------------------------------------------------- ------------ 壓縮 模擬器資料(2個檔案)------------ ---------------------------------------------------- 發生嚴重錯誤!! 檔案被鎖住,無法壓縮!! 壓縮完成!! 發生嚴重錯誤!! 檔案被鎖住,無法壓縮!! 壓縮完成!! ---------------------------------------------------- ------------ 壓縮 hosts 檔案(1個檔案)------------ ---------------------------------------------------- 發生嚴重錯誤!! 檔案被鎖住,無法壓縮!! 壓縮完成!! ---------------------------------------------------- ---------------- 輸出 備份完成 時間 ---------------- ---------------------------------------------------- 結束備份時間: 上午 09:47 ---------------------------------------------------- 批次檔: rem ---===---===---===--- 每月資料備份壓縮的批次檔 ---===---===---===--- @echo on rem --- 指定紀錄檔的名稱與路徑 --- SET month_log=D:\log\每月資料備份壓縮_%date:~0,4%%date:~5,2%%date:~8,2%.log rem ------------------------------ rem --- 指定7-ZIP所在的目錄與檔名 --- SET 7Z="C:\Program Files\7-Zip\7z.exe" REM ------------------------------------- SET /a run_step=0 if exist %month_log% del %month_log% GOTO CHOICE rem --- 紀錄檔的檔頭 --- :STEP_1 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% set /a run_step=%run_step% + 1 GOTO CHOICE rem -------------------- :STEP_2 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] set /a run_step=%run_step% + 1 GOTO RESULT1 :STEP_3 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????? set /a run_step=%run_step% + 1 GOTO RESULT1 :STEP_4_1 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????? set /a run_step=%run_step% + 1 GOTO RESULT1 :STEP_4_2 %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????? set /a run_step=%run_step% + 1 GOTO RESULT1 :STEP_5_1 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????? set /a run_step=%run_step% + 1 GOTO RESULT1 :STEP_5_2 %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????? set /a run_step=%run_step% + 1 GOTO RESULT1 :STEP_6 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 set /a run_step=%run_step% + 1 GOTO RESULT1 rem --- 紀錄檔的檔尾 --- :STEP_7 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 rem -------------------- rem --- 選擇批次檔執行步驟 --- :CHOICE if "%run_step%"=="0" GOTO STEP_1 if "%run_step%"=="1" GOTO STEP_2 if "%run_step%"=="2" GOTO STEP_3 if "%run_step%"=="3" GOTO STEP_4_1 if "%run_step%"=="4" GOTO STEP_4_2 if "%run_step%"=="5" GOTO STEP_5_1 if "%run_step%"=="6" GOTO STEP_5_2 if "%run_step%"=="7" GOTO STEP_6 if "%run_step%"=="8" GOTO STEP_7 if "%run_step%" GEQ "9" GOTO END GOTO END rem -------------------------- rem --- 壓縮結果判斷1:將執行結果列印到紀錄檔中 --- :RESULT1 if errorlevel 255 GOTO ECHO 使用者中斷!! >> %month_log% if errorlevel 8 ECHO 記憶體不足!! >> %month_log% if errorlevel 7 ECHO 壓縮命令列錯誤!! >> %month_log% if errorlevel 2 ECHO 發生嚴重錯誤!! >> %month_log% if errorlevel 1 ECHO 檔案被鎖住,無法壓縮!! >> %month_log% if errorlevel 0 ECHO 壓縮完成!! >> %month_log% GOTO RESULT2 rem ---------------------------------------------------- rem --- 壓縮結果判斷2:正確執行則刪除已壓縮的每日備份檔 --- :RESULT2 if errorlevel 0 RD /S/Q D:\BACKUP\MSN\[email protected] || DEL /Q D:\BACKUP\Charge\*.*.200????? || DEL /Q D:\BACKUP\PassWord\*.*.200????? || DEL /Q D:\BACKUP\Game\*.*.200????? || DEL /Q D:\BACKUP\NET\hosts > nul GOTO CHOICE rem -------------------------------------------------------- :END 此文章於 2008-07-30 10:15 AM 被 tzoyiing 編輯. |
||
|
|
|
New Member
加入日期: Sep 2003
文章: 1
|
引用:
if errorlevel 0 echo a & echo b if errorlevel 0 (echo a) & (echo b) if errorlevel 0 echo a & "echo b" if errorlevel 0 "echo a" & "echo b" if errorlevel 0 echo a||echo b 僅前兩個能正常顯示a 跟 b 而echo a||echo b只會執行echo a.... 所以在RESULT2用 || 取代 && 似乎不恰當 引用:
可能是變數名稱的問題 把SET 7Z="C:\Program Files\7-Zip\7z.exe" 換成 set aa="C:\Program Files\7-Zip\7z.exe"應該就可以 引用:
:RESULT1 if errorlevel 255 GOTO ECHO 使用者中斷!! >> %month_log% 當errorlevel 大於或等於255則條件成立 所以應當用if %errorlevel%==255 goto... 另外RD 只能刪除空資料夾 ps.作業系統:windows 2000 |
|||
|
|
|
Basic Member
加入日期: May 2004 您的住址: ROC
文章: 26
|
引用:
終於修改到可以正常執行了 ^^ 雖然還有些不太滿意,如: ---------------------------------------------------- -------- 壓縮 MSN表情符號、大頭貼、動畫快遞 -------- ---------------------------------------------------- 壓縮完成!! ---------------------------------------------------- ------------- 壓縮 記帳資料(1個檔案)------------- ---------------------------------------------------- 壓縮完成!! 不知如何將「壓縮完成!! 」改輸出成「備份的檔名 壓縮完成!! 」,繼續尋找解答ing~ 還有就是7z壓縮時,沒有檔案可壓卻仍會壓成一個空檔,傳回值依然是0,不知該如何解決?! rem ---===---===---===--- 每月資料備份壓縮的批次檔 ---===---===---===--- @echo off rem --- 指定紀錄檔的名稱與路徑 --- SET month_log=D:\LOG\每月資料備份壓縮_%date:~0,4%%date:~5,2%%date:~8,2%.log rem ------------------------------ rem --- 指定7-ZIP所在的目錄與檔名 --- SET aa="C:\Program Files\7-Zip\7z.exe" REM ------------------------------------- SET /a run_step=0 if exist %month_log% del %month_log% GOTO CHOICE rem ////// 紀錄檔的檔頭 ////// :STEP_1 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 CHOICE rem ///////////////////////// rem ****** 執行步驟 ****** :STEP_2 ECHO ---------------------------------------------------- >> %month_log% ECHO -------- 壓縮 MSN表情符號、大頭貼、動畫快遞 -------- >> %month_log% ECHO ---------------------------------------------------- >> %month_log% %aa% a -mx=9 -t7z D:\BACKUP\MSN\[email protected].%date:~0,4%%date:~5,2%%date:~8,2%.7z D:\BACKUP\MSN\[email protected] GOTO RESULT1 :STEP_3 ECHO ---------------------------------------------------- >> %month_log% ECHO ------------- 壓縮 記帳資料(1個檔案)------------- >> %month_log% ECHO ---------------------------------------------------- >> %month_log% %aa% 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????? GOTO RESULT1 :STEP_4_1 ECHO ---------------------------------------------------- >> %month_log% ECHO ----------- 壓縮 密碼管理資料(2個檔案)----------- >> %month_log% ECHO ---------------------------------------------------- >> %month_log% %aa% 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????? GOTO RESULT1 :STEP_4_2 %aa% 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????? GOTO RESULT1 :STEP_5_1 ECHO ---------------------------------------------------- >> %month_log% ECHO ------------ 壓縮 模擬器資料(2個檔案)------------ >> %month_log% ECHO ---------------------------------------------------- >> %month_log% %aa% 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????? GOTO RESULT1 :STEP_5_2 %aa% 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????? GOTO RESULT1 :STEP_6 ECHO ---------------------------------------------------- >> %month_log% ECHO ------------ 壓縮 hosts 檔案(1個檔案)------------ >> %month_log% ECHO ---------------------------------------------------- >> %month_log% %aa% a -mx=9 -t7z D:\BACKUP\NET\hosts.%date:~0,4%%date:~5,2%%date:~8,2%.7z D:\BACKUP\NET\hosts GOTO RESULT1 rem ********************** rem \\\\\\ 紀錄檔的檔尾 \\\\\\ :STEP_7 ECHO ---------------------------------------------------- >> %month_log% ECHO ---------------- 輸出 備份完成 時間 ---------------- >> %month_log% ECHO ---------------------------------------------------- >> %month_log% ECHO 結束備份時間: >> %month_log% TIME /T >> %month_log% ECHO ---------------------------------------------------- >> %month_log% GOTO END rem \\\\\\\\\\\\\\\\\\\\\\\\\\ rem --- 選擇批次檔執行步驟 --- :CHOICE set /a run_step=%run_step% + 1 if "%run_step%"=="1" GOTO STEP_1 if "%run_step%"=="2" GOTO STEP_2 if "%run_step%"=="3" GOTO STEP_3 if "%run_step%"=="4" GOTO STEP_4_1 if "%run_step%"=="5" GOTO STEP_4_2 if "%run_step%"=="6" GOTO STEP_5_1 if "%run_step%"=="7" GOTO STEP_5_2 if "%run_step%"=="8" GOTO STEP_6 if "%run_step%"=="9" GOTO STEP_7 GOTO END rem -------------------------- rem +++ 壓縮結果判斷1: 將7-ZIP的傳回值寫入紀錄檔 +++ :RESULT1 IF ERRORLEVEL 255 GOTO ECHO 使用者中斷!! >> %month_log% IF ERRORLEVEL 8 ECHO 記憶體不足!! >> %month_log% IF ERRORLEVEL 7 ECHO 壓縮命令列錯誤!! >> %month_log% IF ERRORLEVEL 2 ECHO 發生嚴重錯誤!! >> %month_log% IF ERRORLEVEL 1 ECHO 檔案被鎖住,無法壓縮!! >> %month_log% IF ERRORLEVEL 0 ECHO 壓縮完成!! >> %month_log% && GOTO RESULT2 GOTO CHOICE rem +++ 壓縮結果判斷2:壓縮成功則刪除相應的備份檔 +++ :RESULT2 if "%run_step%"=="2" RD /S/Q D:\BACKUP\MSN\[email protected] if "%run_step%"=="3" DEL /Q D:\BACKUP\Charge\*.*.200????? if "%run_step%"=="4" DEL /Q D:\BACKUP\PassWord\*.idm.200????? if "%run_step%"=="5" DEL /Q D:\BACKUP\PassWord\*.apw.200????? if "%run_step%"=="6" DEL /Q D:\BACKUP\Game\OfflineList_conf.ini.200????? if "%run_step%"=="7" DEL /Q D:\BACKUP\Game\clrmamepro_cmpro.ini.200????? if "%run_step%"=="8" DEL /Q D:\BACKUP\NET\hosts GOTO CHOICE rem ++++++++++++++++++++++++++++++++++++++++++++++++++ :END 此文章於 2008-07-30 03:54 PM 被 tzoyiing 編輯. |
|
|
|