請問各位大大
因我不會指令所以在google找到如下指令(我已修改成我要的檔名後面加上日期),但我該如何讓備到e槽後的日期減掉一天呢???因為sql備份的排程為每周六,週日做異地備份所以要將日期減掉一天,麻煩大大幫忙協助小弟我解答 謝謝!!
copy d:\a\b.txt e:\b\b_%date:~0,4%%date:~5,2%%date:~8,2%.txt
@echo off echo wscript.echo Weekday(date,1) > \.\temp.vbs for /f %%i in ('cscript /nologo \.\temp.vbs') do set wd=%%i if %wd% == 1 goto Sunday if %wd% == 2 goto Monday if %wd% == 3 goto Tuesday if %wd% == 4 goto Wednesday if %wd% == 5 goto Thursday if %wd% == 6 goto Friday if %wd% == 7 goto Saturday goto Exit :Sunday echo Today is Sunday goto Exit :Monday echo Today is Monday goto Exit :Tuesday echo Today is Tuesday goto Exit :Wednesday echo Today is Wednesday goto Exit :Thursday echo Today is Thursday goto Exit :Friday echo Today is Friday goto Exit :Saturday echo Today is Saturday :Exit del \.\temp.vbs pause
有前輩的範例, 你可以參考看看
http://ithelp.ithome.com.tw/question/10001794
這個我有測試過但不知道什麼原因踹不出來所以才發文求助,如要做到我想要的方式我該怎做呢??請我備份出來的檔案為b.bak
以下為我測試順序
1.一開始用原指令測存成.bat不出來
2.不確定是否第一行為%tmp%\tmp.vbs 後來我改成%tmp%\tmp.bak測試不行
3.在改成%tmp%\b.bak還是不行
4.最後%b%\b.bak還是出不來@@
echo wscript.echo dateadd("d",-1,date) >%tmp%\tmp.vbs
for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo %tmp%\tmp.vbs') do set y=%%i
for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo %tmp%\tmp.vbs') do set m=%%j
for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo %tmp%\tmp.vbs') do set d=%%k
if %m% LSS 9 set m=0%m%
if %d% LSS 9 set d=0%d%
copy d:\a\*.bak e:\b\%y%\%y%%m%\%y%%m%%d%\
以上求助大大幫忙解答 感謝!!
當你下指令 ECHO XXXXX > %TMP%\TMP.VBS, 會將 XXXX 存成 TMP.VBS 檔案, 且置於系統暫存目錄下, *.VBS 是 VB SCRIPT 類型的檔案, 你改了附屬檔名成BAK, 這樣子下一行就無法正確執行了, 如果改成 BAK 時, 皆下來幾行中的 "%tmp%\tmp.vbs" 也需改成 "%tmp%\tmp.bak" 不然 cscript 程式會找不到檔案, 你嘗試著照前輩的方法做吧, 基本上是COPY的行為, 即使錯了, 也不會造成系統問題~ ^O^
另外將前輩的指令存成.BAT時, 執行它, 卻沒有任何結果時, 建議你在每一行中間, 加個 PAUSE
, 這個指令會暫停目前程序, 直到你按任何一鍵, 利用此指令, 再配合 ECHO, 你可以追蹤問題所在, 進而修改成你要的 XD
jorden690提到:
copy d:\a\b.txt e:\b\b_%date:~0,4%%date:~5,2%%date:~8,2%.txt
就版大所列的語法, 以今天的日期, 其結果會將d:\a\b.txt 覆製到e:\b\b_20130725.txt
不知所謂錯誤為何??
請將批次檔改為下列試試看
echo wscript.echo dateadd("d",-1,date) >%tmp%\tmp.vbs
for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo %tmp%\tmp.vbs') do set y=%%i
for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo %tmp%\tmp.vbs') do set m=%%j
for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo %tmp%\tmp.vbs') do set d=%%k
set y=%y:~0,4%
if %m% LSS 10 set m=0%m:~0,1%
set m=%m:~0,2%
if %d% LSS 10 set d=0%d:~0,1%
set d=%d:~0,2%
set ym=%y%%m%
set ymd=%ym:~0,6%%d%
set ymd=%ymd:~0,8%
copy d:\tmp\abc.bat d:\tmp\abc.bat_%ymd%
前輩的批次擋我改了一下不用%tmp%,改用D:\ (我的%tmp%在使用者設定檔資料夾)
前輩的if %m% LSS 9 set m=0%m%會多補0,所以拿掉了...
我的批次檔目的是把D:\B昨天日期.aaa複製到E:去
第一行是用今天日期沒有檔案...
<pre class="c" name="code">copy B%date:~0,4%%date:~5,2%%date:~8,2%.aaa E:
echo wscript.echo dateadd("d",-1,date) >D:\tmp.vbs
for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo D:\tmp.vbs') do set y=%%i
for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo D:\tmp.vbs') do set m=%%j
for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo D:\tmp.vbs') do set d=%%k
copy B%y%%m%%d%.aaa E:
請開版大大,把錯誤訊息抓圖上來吧...
感謝go777及所有大大們的協助
讓小弟我得到解答
在次感謝各位大力相挺協助
這個問題我研究過,不是無解但要處理的部份較多,如潤年、二月、跨年、跨月...
總結WINDOWS DOS 中內建外部指令對於日期計算的部份很差
如果是使用非內建指令就可以輕鬆達到目地
請先下載指令檔及說明,內含多個不同途的指令
<pre class="c" name="code">
For /f %%i in ('datex -o -1 -f yyyymmdd') do set Yesterday=\\NAS\BACKUP\%%i.txt
copy A.txt "%Yesterday%"
說明:
取得昨天日期
複製A.TXT 至指定位置中並置換成昨天日期.TXT
至於要以今天日期做為檔案名稱可用
<pre class="c" name="code">
%date:/=%
這樣就簡潔多了
樓主的問題我遇過,是在於不同作業系統或機器日期格式設定不同,也就是說在DOS視窗打%dtae%這個變數出來Output不同的關係。
樓主的指令是%date:~0,4%%date:~5,2%%date:~8,2%,表示是要取%date%變數內第1~5+6~7+8~9這幾個字元,表示%date%變數的內容應該要是yyyy/mm/dd這種格式,樓主可以試試在DOS視窗下打echo %date這個指令,看著格式修改%date:~[x],[y]%指令中[x]和[y]的值來確認取的字元位置即可。