iT邦幫忙

1

關於BAT檔 FOR指令的疑問

  • 分享至 

  • xImage

小弟寫了一個小程式,執行時如果有排程會正常刪除 視窗會顯示:
成功: 排定的工作 "Work" 已成功刪除。
電腦已取消工作

但是沒有排程時 執行時 視窗顯示:

錯誤: 系統找不到指定的檔案。
工作並無排程

請問要如何將錯誤: 系統找不到指定的檔案。 這段拿掉!
有上網先找過資料了... 但實在是找不到只好來拜託各位的幫忙。
謝謝大家
附上一段請大家幫忙看一下

FOR /f %%I IN ('C:\Windows\System32\schtasks.exe /QUERY /FO LIST /TN "Work"') DO (
schtasks /f /delete /TN "Work" && echo 電腦已取消工作
goto home
)
echo 工作並無排程
goto home

alien663 iT邦研究生 4 級 ‧ 2023-05-16 13:30:16 檢舉
用try catch
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
re.Zero
iT邦研究生 5 級 ‧ 2023-05-16 19:51:13

你的程式流程邏輯有點詭異…… 懶得管~~ 就只看你的主要問題:

請問要如何將錯誤: 系統找不到指定的檔案。 這段拿掉!

你這問題不是 for 的問題 ( 看向發問標題~ ) , 而是「不想要顯示錯誤訊息」的問題。

基本上, 作業系統 Windows 有 stdinstdoutstderr 這三個標準資料流:

  • stdin: 標準輸入 (Standard Input) , 一般預設從鍵盤讀取。
  • stdout: 標準輸出 (Standard Output) , 一般預設列印至螢幕。
  • stderr: 標準錯誤 (Standard Error) , 一般預設列印至螢幕。
    ( 不過, 我的經驗中, 有些 Windows 的部分內建指令/程式的錯誤輸出不會用 stderr 這個,原因不知~ )

schtasks.exe 的錯誤訊息 錯誤: 系統找不到指定的檔案, 通常會丟給 stderr 而列印至螢幕; 若不想要錯誤訊息顯示於螢幕上, 可用 2> nul ( 語意: 將輸出給 stderr 的資料流重新導向至 nul ) 這重新導向的語法; 細節請參閱 重新導向/Redirection

例如, 下面這命令就不會在螢幕上顯示錯誤訊息:

schtasks.exe /query /tn "\pathTo\nope" 2> nul

而若想在 for 內使用重新導向的語法, 須注意, 因為 > 為 win-cmd 的特殊字元 ( special command shell character ) , 需搭配 ^ ( escape character, 微軟繁中:逸出字元 ) 以避免 win-cmd 誤解。 例如:

for /f %G in ('schtasks.exe /query /tn "\pathTo\nope" 2^> nul') do echo %G

若是在 .bat 內:

for /f %%G in ('schtasks.exe /query /tn "\pathTo\nope" 2^> nul') do echo %%G

P.s.:

  • 請善用 程式碼與語法高亮標記 - iT邦幫忙 的 Markdown
    不然, 至少, 編輯區工具列, 有個 新增程式碼 (Ctrl-Alt-C) 能用。
    editor-toolbar
    ( 程式碼區塊 亦可用以存放各種文字資料, 以方便他人閱覽。 )

  • iThelp-Markdown 的語法高亮之自動識別時常錯判, 建議用下面方式 (bat) 指定語言:

```bat
echo  hello, world
```

我要發表回答

立即登入回答