批處理腳本 - 輸入/輸出

你好,未來的編程師們!今天,我們將進入批處理腳本這個迷人的世界,聚焦於輸入和輸出操作。作為你們友好的鄰居計算機老師,我很興奮能夠帶領你們踏上這次旅程。如果你從未寫過一行代碼,別擔心——我們會從基礎開始,逐步學習。所以,拿起你喜歡的飲料,讓我們開始吧!

Batch Script - Input / Output

了解批處理腳本中的輸入和輸出

在我們深入細節之前,讓我們先來討論一下在批處理腳本的語境中,輸入和輸出意味著什麼。

  • 輸入 是指進入你的腳本的信息。這就像是在給你的程序喂數據。
  • 輸出 是你的腳本產生或顯示的內容。這是你的腳本工作的結果。

把它想象成廚房:輸入是你用的食材,輸出是你創造的美味佳肴!

基本輸入:SET /P 指令

讓我們從批處理腳本中最常見的獲取輸入的方法開始:SET /P 指令。這個指令允許我們提示用戶輸入並將其存儲在變量中。

@echo off
SET /P name=你的名字是什麼?
echo 你好,%name%!歡迎來到批處理腳本的世界!
pause

在這個例子中:

  1. @echo off 防止命令在屏幕上顯示。
  2. SET /P name=你的名字是什麼? 提示用戶輸入他們的名字並將其存儲在 name 變量中。
  3. echo 你好,%name%! 使用輸入的名字顯示問候。
  4. pause 保持窗口打開,以便你可以看到結果。

嘗試運行這個腳本。這就像和你的計算機進行一場小對話!

基本輸出:ECHO 指令

我們已經看到了 ECHO 指令的使用。它是批處理腳本中顯示輸出的主要方式。讓我們進一步探索它:

@echo off
echo 這是一個簡單的輸出。
echo.
echo 這一行上面有一個空行。
echo "引號"會按原樣顯示。
echo.
echo 當前日期: %date%
echo 當前時間: %time%
pause

這裡發生了什麼:

  • echo. 打印一個空行。
  • 我們可以使用 ECHO 來顯示文本、變量和甚至系統信息,如日期和時間。

轉向輸出(Stdout 和 Stderr)

現在,讓我們來討論一下輸出的轉向。在批處理腳本中,我們有两种主要類型的輸出:

  1. 标准输出(stdout):命令的正常输出。
  2. 标准错误(stderr):错误信息或诊断输出。

我們可以使用 >>> 操作符將這些輸出重定向到文件。

轉向标准输出

@echo off
echo 這將被保存到一個文件 > output.txt
echo 這將被追加到文件 >> output.txt
type output.txt
pause

在這個腳本中:

  • > 創建(或覆蓋)一個文件並將輸出寫入其中。
  • >> 將輸出追加到現有的文件(如果文件不存在,則創建它)。
  • type output.txt 顯示文件的內容。

轉向标准错误

要重定向错误信息,我們使用 2> 而不是單獨的 >

@echo off
dir 不存在的文件夹 2> error.txt
type error.txt
pause

這個腳本嘗試列出一個不存在的文件夹,並將错误信息重定向到一個文件。

轉向 stdout 和 stderr

我們可以将两种类型的输出重定向到同一個文件:

@echo off
dir 2>&1 > output.txt
type output.txt
pause

在這裡,2>&1 意味著“將 stderr 重定向到與 stdout 相同的地方”。

抑制程序输出

有時候,你可能希望在不顯示輸出的情況下運行一個命令。我們可以通过將輸出重定向到一個特殊的設備 NUL 來做到這點。

@echo off
echo 這將被顯示
echo 這將不會被顯示 > NUL
dir > NUL
echo 目錄列表被抑制
pause

在這個腳本中,第二個 ECHO 指令和 DIR 指令的輸出被抑制。

高级輸入/輸出技巧

現在我們已經掌握了基礎知識,讓我們來看看一些更高级的技巧。

使用 CHOICE 獲取用戶輸入

CHOICE 指令提供了一種更結構化的方式來獲取用戶輸入:

@echo off
echo 你喜歡編程嗎?
choice /c YN /m "輸入 Y 表示是或 N 表示否"
if errorlevel 2 goto No
if errorlevel 1 goto Yes
:Yes
echo 很好!讓我們學習更多!
goto End
:No
echo 不要擔心,你很快就會喜歡上的!
:End
pause

這個腳本:

  1. 提供给用戶一個是/否問題。
  2. 使用 /c YN 指定有效的選項(Y 或 N)。
  3. 使用 /m 顯示一條自定義消息。
  4. 使用 if errorlevel 檢查用戶的選擇並跳转到相应的標籤。

從文件讀取

我們也可以從文件中讀取輸入:

@echo off
for /f "delims=" %%a in (input.txt) do (
echo 讀取的行: %%a
)
pause

這個腳本從 input.txt 中讀取每一行並顯示它。

寫入多個文件

讓我們創建一個腳本,將輸出寫入多個文件:

@echo off
echo 文件 1 內容 > file1.txt
echo 文件 2 內容 > file2.txt
echo 文件 3 內容 > file3.txt
echo 文件成功創建!
pause

這創建了三個分別含有不同內容的文件。

輸入/輸出方法總結

讓我們總結一下我們學到的輸入/輸出方法:

方法 描述 示例
SET /P 獲取用戶輸入 SET /P name=輸入名字:
ECHO 顯示輸出 echo 你好,世界!
> 將輸出重定向到文件 echo 文本 > file.txt
>> 將輸出追加到文件 echo 更多文本 >> file.txt
2> 將错误輸出重定向 command 2> error.txt
2>&1 將 stdout 和 stderr 重定向 command > output.txt 2>&1
NUL 抑制輸出 command > NUL
CHOICE 結構化的用戶輸入 choice /c YN /m "是或否?"
FOR /F 從文件讀取 for /f "delims=" %%a in (file.txt) do ...

這就是了,各位!我們一起走过了批處理腳本的輸入和輸出。記住,掌握這些概念關鍵在於練習。嘗試寫你自己的腳本,嘗試不同的命令,不要害怕犯錯誤——這是我們學習的方式!

正如你們的老計算機老師總是說的,“在編程中,每一個錯誤都是一個新的學習機會。”所以,勇往直前,寫一些批處理腳本,願你的輸出總是如你所願!

Credits: Image by storyset