Board logo

主題: [求助] [求助]bat 語法 [打印本頁]

發表人: fishwater    時間: 2008-6-18 01:53 PM     主題: [求助]bat 語法

請問一個bat語法

我想跑一些程式,然後想寫一個bat檔自動不斷執行它

1.需要不斷迴圈
2.跑的結果需要存成一個log
3.正在跑的結果可以show在螢幕上

因為假如我弄成  test.exe -a >>log.txt
那我跑的test.exe -a這個東西的結果只會跑到log裡面,無法在螢幕上顯示,所以不知道該怎麼寫.

請問有辦法這樣弄嘛???謝謝!!
發表人: Ailio    時間: 2008-6-18 03:12 PM

其實在google打bat語法就很多資料了喔
http://tristones.viaspeip.com/archives/001130.html
這篇寫的蠻詳細的 簡體字 記得裝同文堂或是alibabar轉繁體看

至於迴圈 Bat裡面大多都用Goto為主
至於test.exe -a 會產生什麼事 要問Test.exe這之程式怎麼寫的
如果這支程式就只會把資訊寫入log檔 那bat是不可能要求他作他不會做的事情
bat只不過就是一大串的指令自動作而已 並不能做出超過程式範圍的動作
發表人: dlc007    時間: 2008-6-18 03:27 PM


引用:
1.需要不斷迴圈
2.跑的結果需要存成一個log
3.正在跑的結果可以show在螢幕上


1. 不斷迴圈不難, bat檔寫成
:label1
.....
goto label2

:label2
.....
goto label1

2. 跑的結果是要儲存bat跑的結果還是程式跑的結果?
如果bat跑的結果, 要自己下指令紀錄跑了什麼, 例如:
echo 執行步驟1 >> log
echo 執行步驟2 >> log
如果是要紀錄程式跑的結果, 應該是在程式處理比較好吧

3. 要顯示跑的結果, 也是同上


引用:
因為假如我弄成  test.exe -a >>log.txt
那我跑的test.exe -a這個東西的結果只會跑到log裡面,無法在螢幕上顯示,所以不知道該怎麼寫.


要同時顯示又要紀錄顯示結果, bat好像做不到耶, 一般只能從程式處理

[dlc007 在  2008-6-18 03:29 PM 作了最後編輯]
發表人: fishwater    時間: 2008-6-18 05:35 PM

是嘛!!果然bat做不到阿.

迴圈和存log,這我都可以弄出來,只是沒法讓程式結果顯現又存成log.
謝謝指教!!

BTW,"test.exe -a" 這只是我舉的例子.

Thanks~
發表人: 阿達猴    時間: 2008-6-18 05:40 PM

應該是無法同時做兩件事吧~
資料以經>>到檔案去了
所以畫面上就沒有了
除非你>>到檔案
再從檔案>>到畫面
發表人: fishwater    時間: 2008-6-18 06:25 PM

恩恩....剛剛同事也是這樣說!!
只是我要跑stress test,所以一跑就是12小時以上,不能把所以跑過的結果不斷show出來
所以....結論應該就是不行囉??!!
發表人: jegow    時間: 2008-6-18 07:23 PM

:label1
test.exe >> log.txt
type log.txt
goto label1
這樣就可以了
發表人: fishwater    時間: 2008-6-18 10:16 PM


引用:
jegow寫到:
:label1
test.exe >> log.txt
type log.txt
goto label1
這樣就可以了


謝謝你....這個方法已經有想到,可是卻是下下策,因為跑了12小時後的log量勢必很大,不可能每次都全部把它type出來,只想要當次跑的結果.

要當次的結果的原因是,萬一當機或是出問題了,才能從畫面得知,不然當機後可能log會沒存到.

謝謝回覆!!
發表人: oislone    時間: 2008-6-18 10:28 PM

升級版

:label1

test.exe >> log1.txt
type log1.txt
copy log1.txt+log.txt  logall.txt
del log1.txt
del log.txt
rename logall.txt log.txt
del logall.txt

goto label1

大概可以吧
發表人: dennischerry    時間: 2008-6-19 09:24 AM


引用:
oislone寫到:
升級版

:label1

test.exe >> log1.txt
type log1.txt
copy log1.txt+log.txt  logall.txt
del log1.txt
del log.txt
rename logall.txt log.txt
del logall.txt

goto label1

大概可以吧



再修改一下

:label1

test.exe > log.txt
type log.txt
type log.txt >>  logall.txt

goto label1

說明:
> 相當於output, >>相當於append
發表人: fishwater    時間: 2008-6-19 09:31 AM

Thanks....終於可以用了!!但是因為不是資訊系的,所以對於寫程式這方面不太兩光,想再請教一下如何可以把他精簡化!!
因為要跑的程式滿多的,每行都用土法煉鋼,好長阿....應該用個if else之類的可以縮減,是嗎??

@echo off
:label1
c:
cd \Program Files\NVIDIA Corporation\Release

@echo on
alignedTypes -noprompt >c:\log.txt
type c:\log.txt
@echo off
type c:\log.txt >> c:\logall.txt
@echo on
asyncAPI -noprompt >c:\log.txt
type c:\log.txt
@echo off
type c:\log.txt >> c:\logall.txt
@echo on
bandwidthTest -noprompt >c:\log.txt
type c:\log.txt
下刪
.
.
.
.

@echo off
cd \
type unit >>count.txt (用來計數loop,unit放在c:\)
dir count.txt >>logall.txt (loop加總用)
goto label1

[fishwater 在  2008-6-19 12:11 PM 作了最後編輯]
發表人: dennischerry    時間: 2008-6-19 12:46 PM

這種程式不太能簡化...
認份點, 用複制貼上, 可以寫的很快
發表人: jazzblue    時間: 2008-6-19 09:22 PM

批次檔的功能有限
若經常要寫一些程序
我會建議使用 JScript  或 VB Script
發表人: oislone    時間: 2008-6-20 10:06 PM

type log.txt >>  logall.txt
會比 COPY 慢, 因為 COPY 是用區塊, type 是位元顯示,
不過如果不要求速度, 是都沒關係啦.

另外, 結果很多程式要作 LOG, 用 COPY 會更好, 可以使用

a.exe > a.log
type a.log
b.exe > b.log
type b.log
c.exe > b.log
type c.log

copy logall.txt+a.log+b.log+c.log log.txt
.
.
.

另外, 如果 exe 檔是在同一目錄, 可以用新版的 DOS 變數功能, 作自動迴圈, 就不用一直加指令,
可以配合有多少 exe 檔, 就作多少次迴圈動作, 批次檔變數可以查 DOS 視窗的 FOR /? 查 FOR 的
說明, 裡面有 %~ 的變數可用, 算是很強的功能. 但是舊版的 DOS 好像沒有.
發表人: Yves    時間: 2008-6-22 03:41 AM

@Echo off
For /F "delims=" %%i in ('ipconfig') do echo. %%i > con & echo. %%i >> log.txt
For /F "delims=" %%i in ('netstat- nr') do echo. %%i > con & echo. %%i >> log.txt
For /F "delims=" %%i in ('route print') do echo. %%i > con & echo. %%i >> log.txt

把程式執行的結果讀到變數, 然後echo 變數到畫面 跟 echo到檔案
發表人: fishwater    時間: 2008-6-23 12:48 PM

恩恩...感恩感恩....又有另一種方式可以試看看了!!謝謝各位啦....




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