iT邦幫忙

0

請問使用for /f 輸出txt檔,末行出現 ECHO 已關閉。,該怎麼去除?

BAT檔我是這樣寫的:

@echo off
for /f "skip=1" %%i in ('wmic cpu get CurrentClockSpeed') do echo %%i >> E:\Desktop\Clock.txt

執行後txt內文是這樣:
3401
ECHO 已關閉。

想請問的是,要如何把第一行後面的空格及第二行都去除?
謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
wrxue
iT邦好手 1 級 ‧ 2020-09-04 11:24:24
最佳解答

首先講一下為何後面會有空白,

echo %%i >> E:\Desktop\Clock.txt
        ^因為這裡有空白,會一起被寫進去

再講一下為何會有「ECHO 已關閉。」
參考此篇文章,單純在cmd輸入echo,顯示的會是現在的echo狀態,ON或OFF。也就是說你的程式echo %%i有某個時刻%%i是空的,導致剩下echo >> E:\Desktop\Clock.txt,所以才會有「ECHO 已關閉。」。

我自己研究發現%%i為空的時候的情況,他並非無值,而是他的值是'0x0d'也就是\r',所以不能用下面的判斷式來判斷

if [%%i]==[]

所以另一個辦法就是先讓他隨便跟一個字串組合給PowerShell,Powershell會把看不到的字元自動移除,然後再判斷是否跟自己一樣,若是一樣,代表%%i是空的(姑且不論是\n還是\r還是真的空,對我們來說都是空的),如下

if(%%i"123" -ne "123")

所以完整的程式碼如下

@echo off

for /f "skip=1" %%i in ('wmic cpu get CurrentClockSpeed') do (
	PowerShell "if(%%i"123" -ne "123"){%%i | Out-File Clock.txt}"
)

我要發表回答

立即登入回答