【问题标题】:How to dump command line instruction itself into output file?如何将命令行指令本身转储到输出文件中?
【发布时间】:2019-11-25 06:22:11
【问题描述】:

在 Windows 命令行中,我想将命令行指令直接转储到输出文件中,也就是 例如,如果我执行:

dir "C:\Program Files\*.exe" /B /S /O:GNE > "ExeList PgmFiles.txt"

我想在输出文件“ExeList PgmFiles.txt”的第一行加上命令行指令本身(以跟踪实际执行的内容),所以在这个例子中:

dir "C:\Program Files\*.exe" /B /S /O:GNE > "ExeList PgmFiles.txt"

然后文件将获得实际的执行输出。 我试过了:

dir "C:\Program Files\*.exe" /B /S /O:GNE 1 > "ExeList PgmFiles.txt" 0>&1

没有成功

【问题讨论】:

  • 只是吹毛求疵,但 Windows 命令行确实与 DOS 无关。 DOS 是您今天几乎肯定不会使用的旧操作系统。
  • 不是1 >,而是1>...

标签: windows file cmd output io-redirection


【解决方案1】:

您可以通过将命令分配给变量,然后将变量回显到文件中,然后执行变量并将输出附加到同一文件中来获得此结果。

包含所有传递参数的变量是%*。 让我们把它放到一个批处理文件“doit.bat”中:

@echo off
echo %*
%*

您现在可以像这样在命令前加上“doit.bat”:

doit dir "C:\Program Files\*.exe" /B /S /O:GNE > "ExeList PgmFiles.txt"

【讨论】:

    【解决方案2】:

    1>0>&1中的数字有以下含义(更多信息请参阅文章Redirection):

    • 句柄0指向STDIN,即控制台或键盘输入
    • 句柄1指向STDOUT,即控制台或显示输出
    • 句柄2指向STDERR,即错误显示输出

    因此您无法重定向0 (STDIN) 以将执行的命令行写入重定向目标。

    一种可能的方法是提前简单地echo 命令行,escape 任何特殊字符并重定向到同一个目标文件,如下所示(注意转义序列^>):

    echo dir "C:\Program Files\*.exe" /B /S /O:GNE ^> "ExeList PgmFiles.txt" > "ExeList PgmFiles.txt" 
    dir "C:\Program Files\*.exe" /B /S /O:GNE >> "ExeList PgmFiles.txt"
    

    但你可能会同意这不是很优雅。

    另一种方法是使用命令回显,当您环绕仅迭代一次的 for loop 时,您可以将其与命令输出一起重定向,如下所示:

    (for %Z in (.) do dir "C:\Program Files\*.exe" /B /S /O:GNE) > "ExeList PgmFiles.txt"
    

    当然必须启用命令回显(例如,通过键入@echo on),因此托管cmd.exe 实例一定不能使用/Q 选项启动。

    如果您想在 中使用代码,请务必将%Z 更改为%%Z

    【讨论】:

      猜你喜欢
      • 2014-04-08
      • 2010-10-20
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 2022-11-09
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多