gpt4 book ai didi

在 DOSKEY 宏中重定向 STDERR 和 STDOUT

转载 作者:行者123 更新时间:2023-12-04 20:46:37 28 4
gpt4 key购买 nike

我正在尝试定义一个将 STDOUT 和 STDERR 输出重定向到文件的 DOSKEY 宏。 doskey 将通过运行批处理文件来设置。我只能使用以下方法为 STDOUT 执行此操作:

doskey logged_build=build $g build.log

但是,我不能使用典型的 2>&1 选项(如下)也将 STDERR 输出重定向到同一个文件。
doskey logged_build=build $g build.log 2>&1

我也试过
doskey logged_build=build $g build.log 2$g&1

这给出了一个语法错误和
doskey logged_build=build $g build.log 2$g build.log

这会导致无法访问该文件的错误,因为它正在被另一个进程使用。

我确信这只是使用正确的宏通配符(例如使用 $g 而不是 >)的问题,但是我已经进行了大量的谷歌搜索,但还没有找到任何东西。所以我向你们我的 SOF 同胞提出这个问题。

最佳答案

您不能直接在命令行中执行此操作,但您可以使用 doskey 执行此操作宏文件。宏文件甚至不需要使用 confusing magic like $g ;它们不是外壳的一部分,因此外壳特殊字符可以正常使用,并包含在宏的定义中,而不是在定义宏之前由外壳解释。

在任何你喜欢的地方创建一个文件(例如 %USERPROFILE%\mymacros.txt ),并将以下行放入其中:

logged_build=build >build.log 2>&1

然后通过运行加载宏:
doskey /MACROFILE=%USERPROFILE%\mymacros.txt

您也可以在文件中放置许多宏以一次加载它们;这也使得自定义命令提示符变得容易;您可以修改现有的 Command Prompt快捷方式或根据 cmd.exe 创建新的快捷方式制作 Target :
%windir%\system32\cmd.exe /K doskey /MACROFILE=%USERPROFILE%\mymacros.txt

并单击快捷方式将创建一个预先加载所有宏的命令提示符。 /K cmd.exe 的选项在给用户一个交互式提示之前,在 shell 中运行后续命令。如果您的提示自动定义所有宏,而不必每次都设置它们,则可以节省很多麻烦。

或者,为了避免需要修改单个快捷方式,您可以设置一个注册表项,无论如何都会加载宏,即使 cmd.exe直接调用,无需经过修改的快捷方式。赶紧跑:
reg add "HKCU\Software\Microsoft\Command Processor" /v AutoRun /t REG_SZ /d "doskey /MACROFILE=%USERPROFILE%\mymacros.txt"

您可以更改 HKCUHKLM使其适用于所有用户,而不仅仅是您自己,但在这种情况下,您希望将宏文件放在一个公共(public)位置,而不是您的用户配置文件中。烦人的是,你不能使用 REG_EXPAND_SZ对于这样的情况(这将允许您使用 %USERPROFILE% 之类的变量来设置全局 HKLM 设置到与每个用户的配置文件目录相关的文件,或者处理配置文件被重新定位的情况),但它工作得很好。

关于在 DOSKEY 宏中重定向 STDERR 和 STDOUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17074672/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com