iT邦幫忙

0

dos command: 如何將一環境變數引入文字檔後儲存?

abe 2010-06-30 11:08:3811807 瀏覽

如:
test.bat(內容如下)
set ID=123 ,

=============================
文字檔T.txt(部分內容如下)

.
ser=%ID%
.

=============================================
;T.txt引入環境變數後儲存成文字檔T.dat(部分內容如下)

.
ser=123
.

看更多先前的討論...收起先前的討論...
取代變數要用單純的DOS command做
可能辦不到

下面是test.bat的內容
不過我猜這不是你要的結果
set ID=123
echo ser=%ID% > t.dat
type t.dat
James iT邦大師 7 級 ‧ 2010-06-30 13:43:01 檢舉
DOS雖然簡單,但是功能實在不足,要做到讀寫檔案的功能應該不太可能。建議是學一些新一點的語言對於系統管理的自動化會有很多方便。
WINDOWS平台推薦以下幾種
微軟的VBSCRIPT POWERSHELL
第三方免費軟體 AUTOIT AUTOHOTKEY
簡單而言,
是想要把 T.txt 當作 Template
以前自己用 DOS 那時代,
程度不高,也沒聽過 Template 的觀念,
能 work 就很高興了…

要把 T.txt 當 Template 用,
sed -e 's/%D%/123/g' T.txt > T.dat

就可把 T.txt 裡所有 %D% 的地方替換成 123。

不曉得有沒有圖形界面編輯器,
可以從指令行下替換指令?
就可以同樣的方式快速執行。
sailsolitary iT邦研究生 2 級 ‧ 2010-06-30 17:08:26 檢舉
sed 的指令..XP 跟 2003 & 2008 都沒有..
abe iT邦新手 5 級 ‧ 2010-06-30 18:27:34 檢舉
sed -e 's/%D%/123/g' T.txt > T.dat
123如果是變數要如何帶進去呢?
"123" =>為一環境變數,有可能是300 or 500 or 301 .....等
windows 版的 sed 安裝,
可參考:如何用"批次檔"過濾log中的資料

C:\tmp>type T.txt
ASDFGHJKL
ser=%ID%
WERTYUIKG
test for other %ID%
C:\tmp>sed -e "s/%ID%/123/" T.txt
ASDFGHJKL
ser=123
WERTYUIKG
test for other 123
C:\tmp>sed -e "s/%ID%/123/" T.txt > T.dat


假設 T.txt 最後一行多個
my Name is %NAME%
要替代這個 NAME 的話:
C:\tmp>sed -e "s/%ID%/123/;s/%NAME%/Peter/" T.txt
ASDFGHJKL
ser=123
WERTYUIKG
test for other 123
my Name is Peter

或者
編一個 script.txt 內容為
s/%ID%/123/
s/%NAME%/Peter/

執行:
C:\tmp>sed -f script.txt T.txt

也可同時替代好幾個變數。

其他 sed 的使用範例說明,
可參閱:
[好用的 Script] 老工具 Perl, AWK, SED的還不錯的資源
裡面所列的一些連結。
編一個 test2.bat 內容為:
sed -f myscript.sed T.txt > T.dat

而 T.txt 如同樓上的例子,有ID, NAME 兩個變數。
再編一個 test.bat 內容:
set ID=123
set NAME=Peter
echo s/%%ID%%/%ID%/;s/%%NAME%%/%NAME%/ > myscript.sed
call test2.bat

執行 test.bat 就會產生一個 T.dat 出來。

本來想用:
set ID=123
set NAME=Peter
echo sed -e "s/%%ID%%/%ID%/;s/%%NAME%%/%NAME%/" T.txt > test2.bat
call test2.bat

但第3行所產生的test2.bat裡的 %ID% 字樣,又被取代成 123,
所以改產生在 myscript.sed 檔,而避開此問題。
abe iT邦新手 5 級 ‧ 2010-07-01 22:09:38 檢舉
太感謝twtw大的解惑了,
小弟試試看.
另外要如何給點數阿?小弟新手,不知道如何將點數給大大呢!!

2 個回答

6
逮丸逮丸
iT邦大師 1 級 ‧ 2010-07-02 17:39:36
最佳解答

相關解決方式的回答在 討論 之中。

6
shunyuan
iT邦研究生 1 級 ‧ 2010-06-30 11:54:15

echo "%ser%" > t.dat

tombo iT邦研究生 1 級 ‧ 2010-06-30 15:31:03 檢舉

樓主的意思應該是這個內容是在文字檔中間某一行....
如果在 linux 上就簡單了...用 sed 就可以解決...

fillano iT邦超人 1 級 ‧ 2010-06-30 16:14:45 檢舉

sed?在windows下也可以喔:
http://gnuwin32.sourceforge.net/

如果熟悉linux工具,想在windows環境下使用的話...

我要發表回答

立即登入回答