iT邦幫忙

0

指令請教

請問各位大大

因我不會指令所以在google找到如下指令(我已修改成我要的檔名後面加上日期),但我該如何讓備到e槽後的日期減掉一天呢???因為sql備份的排程為每周六,週日做異地備份所以要將日期減掉一天,麻煩大大幫忙協助小弟我解答 謝謝!!
copy d:\a\b.txt e:\b\b_%date:~0,4%%date:~5,2%%date:~8,2%.txt

看更多先前的討論...收起先前的討論...
COPY 的%DATE%參數應該只能以系統日期來作加減
並無法得知計算後的日期是星期六還是星期天..疑惑
ramonliu iT邦新手 4 級 ‧ 2013-07-25 14:39:38 檢舉
VBS 裡的一個FUNCTION ^O^
http://www.w3schools.com/vbscript/func_weekday.asp
jorden690 iT邦新手 4 級 ‧ 2013-07-25 15:58:11 檢舉
不好意思因為我不會所以
請教您該怎做拿能達到我的需求呢??
ramonliu iT邦新手 4 級 ‧ 2013-07-25 22:42:27 檢舉
依照前面的回答, 所寫成的, 你可以在判別執行完後的數值來看今天是星期幾... 在看底下的程式碼時, 不妨學一下DOS下BATCH FILE的寫法, 以及SCRIPT的引用...
@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
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
10
ramonliu
iT邦新手 4 級 ‧ 2013-07-25 09:42:25
最佳解答

有前輩的範例, 你可以參考看看
http://ithelp.ithome.com.tw/question/10001794

看更多先前的回應...收起先前的回應...
jorden690 iT邦新手 4 級 ‧ 2013-07-25 11:43:50 檢舉

這個我有測試過但不知道什麼原因踹不出來所以才發文求助,如要做到我想要的方式我該怎做呢??請我備份出來的檔案為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%\

以上求助大大幫忙解答 感謝!!

ramonliu iT邦新手 4 級 ‧ 2013-07-25 14:11:07 檢舉

當你下指令 ECHO XXXXX > %TMP%\TMP.VBS, 會將 XXXX 存成 TMP.VBS 檔案, 且置於系統暫存目錄下, *.VBS 是 VB SCRIPT 類型的檔案, 你改了附屬檔名成BAK, 這樣子下一行就無法正確執行了, 如果改成 BAK 時, 皆下來幾行中的 "%tmp%\tmp.vbs" 也需改成 "%tmp%\tmp.bak" 不然 cscript 程式會找不到檔案, 你嘗試著照前輩的方法做吧, 基本上是COPY的行為, 即使錯了, 也不會造成系統問題~ ^O^

ramonliu iT邦新手 4 級 ‧ 2013-07-25 14:16:05 檢舉

另外將前輩的指令存成.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
不知所謂錯誤為何??疑惑

go777 iT邦研究生 1 級 ‧ 2013-07-25 17:39:49 檢舉

請將批次檔改為下列試試看

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%

CalvinKuo iT邦大師 7 級 ‧ 2013-07-25 17:44:43 檢舉

前輩的批次擋我改了一下不用%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:


請開版大大,把錯誤訊息抓圖上來吧...

jorden690 iT邦新手 4 級 ‧ 2013-07-26 09:35:56 檢舉

感謝go777及所有大大們的協助
讓小弟我得到解答

在次感謝各位大力相挺協助謝謝

6
蟹老闆
iT邦大師 1 級 ‧ 2013-07-26 01:36:32

這個問題我研究過,不是無解但要處理的部份較多,如潤年、二月、跨年、跨月...
總結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:/=%

這樣就簡潔多了

4
sam0407
iT邦大師 1 級 ‧ 2013-07-26 09:36:55

樓主的問題我遇過,是在於不同作業系統或機器日期格式設定不同,也就是說在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]的值來確認取的字元位置即可。

我要發表回答

立即登入回答