首先講一下為何後面會有空白,
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}"
)