从文件中读取数据的命令通常但并不总是支持从句柄 STDIN 中读取数据。管道字符| 将写入处理应用程序A 的STDOUT 的输出重定向到处理应用程序B 的STDIN。有关更多详细信息,请阅读有关Using command redirection operators 和SS64 的Microsoft 文章关于Redirection的文章。
哪些控制台应用程序支持来自 STDIN 的输入是一个文档问题。只有少数随 Windows 安装的控制台应用程序支持来自 STDIN 的输入。但是有很多第三方控制台应用程序支持来自 STDIN 的输入。他们中的许多人没有在文档中明确解释输入也可以从 STDIN 中读取,而不仅仅是从指定为参数的输入文件中读取。但是,通过一次试验,总是可以很快找到对 STDIN 数据输入的支持。
在 FIND 和 FINDSTR 中也支持 STDIN 的标准 Windows 控制台应用程序是 例如 MORE 和 排序。
cmd.exe 的大多数标准 Windows 控制台应用程序和内部命令不处理文件的内容,因此不支持 STDIN。有关 Windows 标准命令的列表,请参阅Microsoft's command-line reference。但有关 Windows 标准命令行命令的更多详细信息,可以在SS64.com - A-Z index of the Windows CMD command line 链接的网页上找到。
从一个应用程序的 STDOUT 重定向到另一个应用程序的 STDIN 经常与第三方控制台应用程序一起使用,因为其中许多支持来自 STDIN。每个编译器/脚本解释器都会将消息写入 STDOUT 并将致命错误消息写入 STDERR,这些消息会被许多 GUI 文本编辑器和 IDE 应用程序重定向,用于捕获、过滤和打印这些消息到程序员的 GUI 窗口。此重定向使用与 Windows 命令解释器提供的重定向运算符 > 和 >> 和 | 相同的机制完成。
一般来说,所有支持键盘输入的控制台应用程序也支持来自 STDIN 的输入,这些输入是从输出或其他应用程序或文件重定向的。但与往常一样,也有例外,例如某些应用程序设计只接受直接来自键盘的输入,而不是来自句柄 STDIN 的输入,例如出于安全原因,例如应用程序或脚本不应该确认/输入某些内容,但是一个真正的人类用户通过键盘。
SET命令用于为环境变量赋值,或将1个或多个环境变量的值输出到STDOUT,或计算算术表达式,或提示批处理用户输入从 STDIN 读取的字符串。此命令不是为读取文件或写入文件而设计的。
但是仍然可以使用set /P 和jeb 在他的回答中描述的特殊语法将应用程序的输出重定向到环境变量。但是这种方法很少使用,我认为原因是所需表达式的复杂性。
但是,演示代码用于将当前时间分配给环境变量。很多时候,有一个命令参数或其他功能可以避免将文本重定向到命令或控制台应用程序的 STDIN。获取以当前时间为值的环境变量也是如此。
有预定义的环境变量DATE和TIME。在命令提示符窗口set /? 中运行并阅读所有输出帮助页面。最后一页列出了批处理文件中经常需要的一些特殊环境变量,并附有说明,包括 DATE 和 TIME。
尝试一下
echo Current date is %DATE% and current time is %TIME%
请注意,%DATE% 和 %TIME% 返回的日期和时间字符串的格式取决于 Windows 区域和语言设置(国家/地区)中的当前设置。因此,仅当批处理文件始终在日期/时间格式众所周知且不会更改的同一台计算机上执行时,才使用%DATE% 和%TIME%。否则最好使用wmic.exe OS get localdatetime。有关 Windows 上日期/时间使用的更多详细信息,请参阅Find out if file is older than 4 hours in Batch file 上的答案。
FOR 命令可用于将应用程序输出的字符串分配给 1 个或多个环境变量。在命令提示符窗口for /? 中运行以获取有关此命令的帮助。使用 FOR 的方法最常用于将应用程序的输出或从文件读取的文本分配给环境变量。
批处理文件示例:
@echo off
for /F %%I in ('time /T') do set "a=%%I"
echo Time is %a%