批处理脚本 - 输入/输出

你好,未来的程序员们!今天,我们将深入批处理脚本的迷人世界,专注于输入和输出操作。作为你友好的邻居计算机老师,我很高兴能引导你们完成这次旅程。如果你之前从未编写过一行代码,也不用担心——我们将从基础开始,逐步学习。那么,拿起你最喜欢的饮料,让我们一起开始吧!

Batch Script - Input / Output

理解批处理脚本中的输入和输出

在我们深入研究之前,让我们先谈谈在批处理脚本的背景下输入和输出分别意味着什么。

  • 输入 是进入你的脚本的信息。就像给你的程序喂数据。
  • 输出 是你的脚本产生或显示的内容。它是你脚本工作的结果。

把它想象成一个厨房:输入是你使用的食材,输出是你制作的美味佳肴!

基本输入:SET /P 命令

让我们从批处理脚本中最常见的获取输入的方式开始:SET /P 命令。这个命令允许我们提示用户输入并将它存储在一个变量中。

@echo off
SET /P name=你的名字是什么?
echo Hello, %name%! 欢迎来到批处理脚本的世界!
pause

在这个例子中:

  1. @echo off 防止命令在屏幕上显示。
  2. SET /P name=你的名字是什么? 提示用户输入他们的名字,并将其存储在 name 变量中。
  3. echo Hello, %name%! 使用输入的名字显示一个问候。
  4. pause 保持窗口打开,以便你可以看到结果。

尝试运行这个脚本。就像和你的电脑进行一次小对话!

基本输出:ECHO 命令

我们已经看到了 ECHO 命令的使用。它是显示批处理脚本输出的主要方式。让我们进一步探索它:

@echo off
echo 这是一个简单的输出。
echo.
echo 这一行上面有一个空行。
echo "引号"会原样显示。
echo.
echo 当前日期: %date%
echo 当前时间: %time%
pause

以下是发生了什么:

  • echo. 打印一个空行。
  • 我们可以使用 ECHO 显示文本、变量,甚至系统信息,如日期和时间。

重定向输出(标准输出和标准错误)

现在,让我们来谈谈输出重定向。在批处理脚本中,我们有两种主要类型的输出:

  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. 向用户提出一个 Yes/No 问题。
  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 Hello, World!
> 重定向输出到文件 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