cmd - cmd 重定向:相当于 bash exec >file
问题描述
中bash
,与
exec >file
标准输出的所有输出都将被重定向。
windows中是否有等价物cmd.exe
?
== PS ==
为什么需要它?
在我们需要支持嵌入式 shell(Windows 上的 cmd.exe)的应用程序中,为了获得更好的文本搜索支持,我们决定将命令执行与输出显示分离。
在 bash 下,我们已经习惯exec >file
了实现这一点,它可以无缝地工作。但是我的 cmd 专业知识不足以在 windows 下找到等效的命令。
==编辑==
澄清exec >file
在 bash 中做什么
在 bash之后exec >file
,文件描述符 1,即它的标准输出被重定向到file
. 这与 不同mycommand >file
。
在前一种情况下,shell本身的stdout被重定向,在其中运行的任何命令的stdout在技术上都没有被重定向,但由于它是shell的子进程,stdout被继承,因此在运行ls
之后exec >file
,ls
输出将写入`file.
在后一种情况下,shell 本身的标准输出没有变化,只有子进程的标准输出被重定向(通过 shell,它的父进程)。
总之,我要问的是如何重定向cmd.exe
自己的标准输出,然后cmd.exe
像往常一样交互使用,除了cmd.exe
不向控制台写入任何内容,所有输出都写入文件。
因此,以下方法不是我追求的
dir >file
wrap_several_command_to_batch_file >file
wrap_several_command_to_batch_file_and_redirect_inside_then_exit
解决方案
没有等效的exec
命令。
但是可以通过重启自己的批处理文件来模拟。
这仅适用于批处理文件本身中的所有命令,但在批处理结束时结束。
@echo off
REM *** Trampoline jump for function calls of the form ex. "C:\:function:\..\ownBatchFile.bat"
FOR /F "tokens=3 delims=:" %%L in ("%~0") DO goto :%%L
REM *** Emulated exec
REM *** Restart this batch file with the function name inside %0
REM *** Parameters are appended, but works only for simple parameters
call "%~d0\:exec:\..\%~pnx0" %* > file
exit /b
:exec
echo This will be redirected
如果您还想从命令行重定向,有两种不同的可能性。
- 使用重定向启动 cmd。
cmd /k > file
- 通过重定向恢复失败来干扰文件句柄。
重定向有效,但以后无法恢复(只能通过退出 cmd 实例)。
阅读更多关于重定向和文件句柄的更多乐趣
echo dummy >NUL 2> nul 3> file
第二个例子有效,因为当一次有多个重定向时,文件句柄的恢复失败,因为恢复的顺序是由 cmd.exe 以错误的顺序完成的。
推荐阅读
- javascript - 本文档需要 Angular 11 中的“TrustedScriptURL”分配
- linux - 如何创建一个运行五个 osmocom 脚本的 sh 脚本?
- php - 尝试在 null 上读取属性“名称”
- typescript - Aurelia Webpack 路由器使用时出错
- python - openpiv 的构建轮 (PEP 517)
- mysql - mysql 如果列为空,则选择,如果不为空,则应用条件
- flutter - flutter int got to zero
- python - “ValueError:源代码字符串不能包含空字节”错误
- c++ - wxWidget鼠标处理
- python - 如何在python中填写字典?