PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 七嘴八舌異言堂
帳戶
密碼
 

  回應
 
主題工具
tzoyiing
Basic Member
 
tzoyiing的大頭照
 

加入日期: 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
     
      
舊 2008-07-29, 08:46 PM #1
回應時引用此文章
tzoyiing離線中  
tzoyiing
Basic Member
 
tzoyiing的大頭照
 

加入日期: 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%

===================================
 
舊 2008-07-29, 08:47 PM #2
回應時引用此文章
tzoyiing離線中  
PAN_PAN
Junior Member
 
PAN_PAN的大頭照
 

加入日期: 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 所寫的!
舊 2008-07-29, 10:33 PM #3
回應時引用此文章
PAN_PAN離線中  
PAN_PAN
Junior Member
 
PAN_PAN的大頭照
 

加入日期: 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 不太一樣..
舊 2008-07-29, 10:48 PM #4
回應時引用此文章
PAN_PAN離線中  
tzoyiing
Basic Member
 
tzoyiing的大頭照
 

加入日期: May 2004
您的住址: ROC
文章: 26
引用:
作者PAN_PAN
以我的經驗來說.

應該是 %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 檔

然後把這...


date的部份應該是ok的,因為可以正確抓到如:20080730
至於FORFILES的部份,小弟會再試試看 ^^


引用:
作者PAN_PAN
另外:
>> 其中DEL /Q D:\X\A.idm.200????? 不知為何一直無法正確執行<<

:STEP_5
if errorlevel 0 "GOTO RESULT" & "DEL /Q D:\BACKUP\NET\hosts"

他和其他的 STEP 不太一樣..


因為路徑太長,所以帖上省略成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=
舊 2008-07-30, 12:18 AM #5
回應時引用此文章
tzoyiing離線中  
PAN_PAN
Junior Member
 
PAN_PAN的大頭照
 

加入日期: 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 編輯.
舊 2008-07-30, 04:34 AM #6
回應時引用此文章
PAN_PAN離線中  
Crazynut
Master Member
 

加入日期: Apr 2001
您的住址: 高雄
文章: 2,247
看得眼花撩亂…

建議您可以仿照老式的程式設計技巧,設定偵錯點。

在批次檔內,先把echo off那一行去掉(不去掉就看不到哪一行指令正在執行),然後加入pause指令(可以按任意鍵再繼續),來仔細瞧一瞧,倒底是那一行執行出了問題,再鎖定那一行的語法、使用到的參數來推敲錯誤所在。

Good Luck
__________________
簽名檔真是礙眼…還是讓版面乾淨點吧!
舊 2008-07-30, 05:45 AM #7
回應時引用此文章
Crazynut離線中  
tzoyiing
Basic Member
 
tzoyiing的大頭照
 

加入日期: May 2004
您的住址: ROC
文章: 26
引用:
作者PAN_PAN
我的意思是說

: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=
這些東西寫錯地方了


&&的部份小弟已經改用||來取代,目前已可以正確刪除檔案了
至於底下set的部份則全部刪除掉了 ^^


引用:
作者Crazynut
看得眼花撩亂…

建議您可以仿照老式的程式設計技巧,設定偵錯點。

在批次檔內,先把echo off那一行去掉(不去掉就看不到哪一行指令正在執行),然後加入pause指令(可以按任意鍵再繼續),來仔細瞧一瞧,倒底是那一行執行出了問題,再鎖定那一行的語法、使用到的參數來推敲錯誤所在。

Good Luck


已改成@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 編輯.
舊 2008-07-30, 10:09 AM #8
回應時引用此文章
tzoyiing離線中  
justliker
New Member
 

加入日期: Sep 2003
文章: 1
引用:
作者tzoyiing
&&的部份小弟已經改用||來取代,目前已可以正確刪除檔案了
至於底下set的部份則全部刪除掉了 ^^

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用 || 取代 && 似乎不恰當
引用:
1.dos視窗內跑完批次檔后,發現7z完全不會執行,會出現如下的錯誤:
============================
C:\>Z\BACKUP\PassWord\my.idm.20080730.7z D:\BACKUP\PassWord\my.idm.200?????
系統找不到指定的路徑。
============================
可若將該行剪下單獨執行卻又可以正確跑完,不知是何緣故?! @@"

可能是變數名稱的問題
把SET 7Z="C:\Program Files\7-Zip\7z.exe" 換成 set aa="C:\Program Files\7-Zip\7z.exe"應該就可以
引用:
2.另外紀錄檔的部份也有問題,7z沒執行成功卻出現一堆錯誤&正確的代碼?!

:RESULT1
if errorlevel 255 GOTO ECHO 使用者中斷!! >> %month_log%

當errorlevel 大於或等於255則條件成立
所以應當用if %errorlevel%==255 goto...
另外RD 只能刪除空資料夾

ps.作業系統:windows 2000
舊 2008-07-30, 12:10 PM #9
回應時引用此文章
justliker離線中  
tzoyiing
Basic Member
 
tzoyiing的大頭照
 

加入日期: May 2004
您的住址: ROC
文章: 26
引用:
作者justliker
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用 || 取代 && 似乎不恰當

這是我之前思慮不周,所以改寫成如下:
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
加上%run_step%來判斷該刪除哪些檔案

可能是變數名稱的問題
把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

if %errorlevel%==255的部份,用if errorlevel 255應該就可以表示,所以就沒改
另本想用deltree刪除目錄,可是xp沒有這個檔案,所以改成RD加參數/S/Q


終於修改到可以正常執行了 ^^
雖然還有些不太滿意,如:
----------------------------------------------------
-------- 壓縮 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 編輯.
舊 2008-07-30, 03:52 PM #10
回應時引用此文章
tzoyiing離線中  


    回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是03:22 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2026。