为什么从 .bat 文件运行时 Windows 命令行会更改命令?

为什么从 .bat 文件运行时 Windows 命令行会更改命令?

如果我想运行命令

md5deep -rb . | find /I ".jpg" | sort > local.md5

我从命令提示符运行它,它显示的内容与我输入的内容完全一样,但是当我将它放入 .bat 文件中并运行它时,我看到的内容如下:

md5deep -rb .   | find /I ".jpg"   | sort  1>local.md5

好像它在前面插入了制表符|,然后变成>1>。为什么?一开始我以为是编码问题,但这个文件只是一个简单的 ANSI 文件。

这与.bat 文件内部的@@转换有关系吗?@

答案1

没什么可担心的。这只是CMD当您不使用以下代码抑制“跟踪”输出时 Windows 解析器输出行的方式:

@echo off

或者

@commandname

我不确定您指的是@@versus什么@(可能除了上面的)。我不知道 有什么特别之处,除非您将其与变量名versus@@混淆。%%%

答案2

1> 指的是标准输出如何在 bat 文件中被重定向。

您有两个通道,一个用于标准输出 (1>),另一个用于标准错误输出 (2>)。它们使用 1> 或 2> 进行处理,并提供两种不同类型的执行反馈。我有以下不同重定向排列的列表:

command > file      Write standard output of command to file
command 1> file     Write standard output of command to file (same as previous)
command 2> file     Write standard error of command to file (OS/2 and NT)
command > file 2>&1     Write both standard output and standard error of command to file (OS/2 and NT)
command >> file     Append standard output of command to file
command 1>> file    Append standard output of command to file (same as previous)
command 2>> file    Append standard error of command to file (OS/2 and NT)
command >> file 2>&1    Append both standard output and standard error of command to file (OS/2 and NT)
commandA | commandB     Redirect standard output of commandA to standard input of commandB
commandA 2>&1 | commandB    Redirect standard output and standard error of commandA to standard input of commandB (OS/2 and NT)
command < file  command gets standard input from file
command 2>&1    command's standard error is redirected to standard output (OS/2 and NT)
command 1>&2    command's standard output is redirected to standard error (OS/2 and NT)

这是来自 Rob van der Woude 关于 Win32 脚本的优秀网站: http://www.robvanderwoude.com/redirection.php

相关内容