我正在尝试定义一个DOSKEY宏,它将STDOUT和STDERR输出重定向到一个文件。将通过运行批处理文件来设置doskey。对于STDOUT,我只能使用以下内容来执行此操作:
doskey logged_build=build $g build.log但是,我不能使用typical 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而不是>),但是我做了大量的谷歌搜索,还没有找到任何东西。所以我向你提出这个问题,我的朋友SOFers。
发布于 2016-02-19 02:46:01
您不能直接在命令行中执行此操作,但可以使用doskey宏文件执行此操作。宏文件甚至不需要使用confusing magic like $g;它们不是shell的一部分,因此shell特殊字符可以正常使用,并包含在宏定义中,而不是在定义宏前由shell解释。
在您喜欢的任何位置创建一个文件(例如%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单击快捷键将创建一个命令提示符,其中所有宏都已预先加载。cmd.exe的/K选项在向用户提供交互式提示符之前运行shell中的后续命令。如果您的提示自动定义了所有宏,而不必每次都对其进行设置,则可以省去很多麻烦。
或者,为了避免需要修改单个快捷键,您可以设置一个注册表项,该注册表项在任何情况下都将加载宏,即使直接调用cmd.exe也是如此,而不需要通过修改的快捷键。只需运行:
reg add "HKCU\Software\Microsoft\Command Processor" /v AutoRun /t REG_SZ /d "doskey /MACROFILE=%USERPROFILE%\mymacros.txt"您可以将HKCU更改为HKLM,使其全局应用于所有用户,而不仅仅是您自己,不过在这种情况下,您可能希望将宏文件放在一个公共位置,而不是您的用户配置文件。令人恼火的是,您不能在这种情况下使用REG_EXPAND_SZ (这将允许您使用像%USERPROFILE%这样的变量来设置相对于每个用户的配置文件目录的文件的全局HKLM设置,或者处理配置文件被重新定位的情况),但是它工作得足够好了。
发布于 2013-06-13 05:44:09
我也曾在网上搜索过一个解决方案,但没有运气。我所能想到的最好的方法是将2>&1添加到宏的调用中:
doskey logged_build=build $* $g build.log然后按如下方式调用它:
logged_build 2>&1https://stackoverflow.com/questions/17074672
复制相似问题