Board logo

主題: [求助] [問題]一個DOS的問題 [打印本頁]

發表人: 5214    時間: 2008-8-6 09:16 PM     主題: [問題]一個DOS的問題

小弟想請要一下
不知道在MS-dos底下如何使用環境變數呢
其實小弟是想要用DIR指令產生一個檔名
ex
dir d:\ > d:\test"時間".txt
小弟想要產生一個檔名為test且"時間"為當時的時間
小弟有用過
dir d:\ > d:\test"%TIME"txt
不過不行
不知道怎麼克服這個問題呢
勞煩高手解答^^
發表人: badcat    時間: 2008-8-6 10:31 PM

Ex: for /F "tokens=1-4 delims=:." %%i IN ("%TIME%") do set timestamp=%%i%%j%%k_%%l
(環境: Windows 2000/XP 以上限定。)

請 "for /?" 看詳細說明,檔案剖析/字串剖析。(說實在話,MS 的說明都有一點不知所云?請用力了解!)

[badcat 在  2008-8-6 10:38 PM 作了最後編輯]
發表人: 5214    時間: 2008-8-7 12:19 AM

感謝您的回覆
不過老實說
小弟是要用DIR產生的檔名有時間
不過感覺上這應該是使用for迴圈
應該不太相關吧??
發表人: badcat    時間: 2008-8-7 08:30 AM

壞喵 只給了您「魚竿」喔!要怎樣釣上魚,自己得稍微努力一下呦!(好險!還以為會被 樓主 您臭罵一頓!)

提示: %TIME% 環境變數中間有 ":" (冒號) 例外字,":" 不能做為檔案名稱。(22:18:45.39)

其它就看您發揮了!

[badcat 在  2008-8-7 08:36 AM 作了最後編輯]
發表人: RetupmocSoft    時間: 2008-8-7 10:59 AM

把冒號改為減號或底線
這樣就符合 DOS 8.3 的命名規則啦.....
發表人: fishwater    時間: 2008-8-7 12:48 PM

set dt=%date:/=%_%time::=%
set dt=%dt: =%
mkdir D:\test\%dt%  
(上面這一段是抓日期出來且建一個資料夾)

dir d: >>D:\test\%dt%\abc.txt'"
(上面為例子,將你想要的資料存到那個日期的資料夾內)

這是之前測試需要弄得.....不知道對你合不合適??!!
發表人: badcat    時間: 2008-8-7 02:53 PM

fishwater 的方法比 壞喵 的更漂亮,就用 fishwater 的方法吧!(高手!高手!高高手 啊!)
(5214 記得要送花給 fishwater呀!)

問題 1 : 壞喵 倒是想問 fishwater,這技巧是在哪裏進修的啊?(MS 說明檔中有嗎?)

[badcat 在  2008-8-7 03:09 PM 作了最後編輯]
發表人: badcat    時間: 2008-8-7 03:01 PM


引用:
fishwater寫到:
set dt=%date:/=%_%time::=%
set dt=%dt: =%
mkdir "D:\test\%dt%"
(上面這一段是抓日期出來且建一個資料夾)

dir d:\ >> "D:\test\%dt%\abc.txt'"
(上面為例子,將你想要的資料存到那個日期的資料夾內)

這是之前測試需要弄.....不知道對你合不合適??!!

順便來抓漏一下!(貓 賊笑中...)

問題 2 :不過第二行是多餘的嗎? set dt=%dt: =%
有必要再剖析第二遍嗎?(和 第一行的 「set dt=%date:/=%_%time::=%」 分隔符號 ": =" 不是已經重覆了嗎?)

[badcat 在  2008-8-7 11:36 PM 作了最後編輯]
發表人: 5214    時間: 2008-8-7 06:35 PM

首先感謝兩位高手的教學
不過DOS的語法真是讓我有點亂阿
真是不習慣 明明就是很簡單的程式
但是看起來就覺得很模糊
順便回覆batcat上面的問題
問題 2 :不過第二行是多餘的嗎? set dt=%dt: =%
有必要再剖析第二篇嗎?(和 第一行的 「set dt=%date:/=%_%time::=%」 分隔符號 ": =" 不是已經重覆了嗎?)
有這一行與沒有這一行的結果是日期DATA與時間TIME之間有無空白
若沒有這一行 他們之間會有空白
若有則不會有空白
這是小弟測試的結果^^
不過不確定
還有dir d:\ >> "D:\test\%dt%\abc.txt'"
多了「'

[5214 在  2008-8-7 06:56 PM 作了最後編輯]
發表人: badcat    時間: 2008-8-7 08:15 PM

一. 空白的問題:
set dt=%date:/=%_%time::=%

壞喵 的電腦秀出 %dt% 時不會有空白,不過因為 壞喵 有調整過日期/時間的格式。( 控制台\地區及語言選項\地區選項\標準及格式\自訂\(時間\日期) )

壞喵 的電腦秀出:2008-08-07 19:59:59.29 轉換後 2008-08-07_195859.29
(沒有空白)

貓 猜可能是預設的 %DATE% 或 %TIME% 的格式中,前後有空白?(不確定?)
或是不會補 0 ? (Ex: 23: 8:17.03 != 23:03:17.03)

也因為如此,所以 壞喵 幫忙抓漏 -> mkdir "D:\test\%dt%"
這樣萬一產生「空白」等無法連貫的路徑字元時,雙引號 " 可以含括成一個完整的路徑字串。(Windows 2000/XP 必備符號)


二. 分隔字串 加上 空白 的改良:
(2008-08-07_2316 訊,壞喵 此例的方法是錯的,故註銷。)(笑!)


三. 該「環境變數直接做『分隔字串』的剖析法」從哪學到的?

謝謝 fishwater 的教導,不過 壞喵 上面的問題: (修 2008-08-07_2314)

問題 1 : set dt=%date:/=%_%time::=%

棕色 標出的技巧 fishwater 您到底是從哪學來的?壞喵 從 MS 官方的說明檔都沒看到過耶!還望 fishwater 釋疑啊!(貓 真的好想知道!) (修 2008-08-07_2314)

[badcat 在  2008-8-7 11:40 PM 作了最後編輯]
發表人: 5214    時間: 2008-8-7 11:06 PM

喝喝
其實小弟不知道這種技巧
是看了fishwater 的教學後照他的改的啦
畢竟小弟是個超級肉腳
因此我也不知道她是如何學習到的
可能要請教他吧^^
對了 順便一提
不知道各位是否知道DOS有比對檔案內容的指令嗎
就是假使有兩個檔案
1.txt 內容
1
2
3
2..txt內容
1
1
2
2
3
是否有類似linux的diff指令
能辨識出這兩個檔案內容不同的地方
然後可以輸出不同的地方為
1
2
(此兩行為2.txt不同處)
麻煩高手告知^^
發表人: badcat    時間: 2008-8-7 11:21 PM

壞喵 的確是想問 fishwater:「環境變數直接做『分隔字串』的剖析法」從哪學到的?搞錯對象成 5214,5214 對不起!

至於 5214 上面的 檔案比較內容 問題,可以使用:
comp /?
fc /?

這兩個 批次檔 指令,看看那個指令比較適合您?

[badcat 在  2008-8-7 11:34 PM 作了最後編輯]
發表人: Jonson    時間: 2008-8-8 12:17 AM

SET /?
發表人: coke555    時間: 2008-8-8 12:29 AM

剛才玩了一下,發現星期x很刺眼,就改了一下試看看
有興趣的人試一下吧


set dt=%date:/=%_%time::=%
mkdir "D:\test\%dt%"

set dt=%dt: =%
set dt=%dt:星=%
set dt=%dt:期=%
set dt=%dt:一=%
set dt=%dt:二=%
set dt=%dt:三=%
set dt=%dt:四=%
set dt=%dt:五=%
set dt=%dt:六=%
set dt=%dt:日=%
mkdir "D:\test\%dt%"

dir d:\ >> "D:\test\%dt%\abc.txt"
發表人: badcat    時間: 2008-8-8 12:50 AM


引用:
Jonson寫到:
SET /?

哈!哈!玩了 批次檔 這麼久,竟沒注意到 SET 有此功能,看到 壞喵 還要努力修煉啊!(MS 的說明檔果然讓人不知所云啊!希望能多點範例啊!)

謝  Jonson 的開示!
發表人: 5214    時間: 2008-8-8 04:05 AM


引用:
badcat寫到:
壞喵 的確是想問 fishwater:「環境變數直接做『分隔字串』的剖析法」從哪學到的?搞錯對象成 5214,5214 對不起!

至於 5214 上面的 檔案比較內容 問題,可以使用:
comp /?
fc /?

這兩個 批次檔 指令,看看那個指令比較適合您?

[badcat 在  2008-8-7 11:34 PM 作了最後編輯]

恩 比較好奇的是 小弟用/?後
發現沒有只顯示不同的行數
其實小弟比較想要它只顯示出兩檔案不同的行數
不知道是否有Option可以克服呢
發表人: Jonson    時間: 2008-8-8 12:39 PM

Dos 不是一套文字編輯軟體,也不是檔案比對軟體
您不該想要使用 Dos 指令就可以做到完整的檔案比對、分析功能
應該去找找 命令列操作的檔案比對工具軟體才是
(可以到此看看: http://ying.homedns.org/wp/2007/04/213/)
發表人: wugen    時間: 2008-8-11 08:12 AM


/? 是用來顯示所有指令參數的參數, 你應該參考由/?顯示出來的選項一自己的需求去下相關的參數, 而不是在批次檔裡下/? 參數.

i.e.  在command prompt裡下 fc /? 會顯示出所有fc 的參數
發表人: dennischerry    時間: 2008-8-11 08:29 AM

有些特殊需求, dos沒辦法支援時, 最好的方法, 就是自己寫一支小程式,
比對檔案的程式, 應該不會很難




歡迎光臨 TWed2k (http://twed2k.org/) Powered by Discuz! 4.1.0