use*_*030 98 windows cmd batch-file io-redirection
我正在创建一个批处理文件,其中包含一些简单的命令来从系统中收集信息.批处理文件包含获取时间,IP信息,用户等的命令.
我在批处理文件中组装了所有命令,然后运行,但是我希望批处理文件在运行时将结果输出到文本文件(日志).是否有可以添加到批处理中的命令?
请记住,我不想从cmd运行批处理,然后重定向输出; 如果可能,我想重定向批处理内部的输出.
dbe*_*ham 145
简单的天真方式很慢,因为它打开并多次将文件指针定位到文件结束.
@echo off
command1 >output.txt
command2 >>output.txt
...
commandN >>output.txt
Run Code Online (Sandbox Code Playgroud)
更好的方法 - 更容易编写,更快,因为文件只打开和定位一次.
@echo off
>output.txt (
command1
command2
...
commandN
)
Run Code Online (Sandbox Code Playgroud)
另一种只打开文件并定位文件的好方法
@echo off
call :sub >output.txt
exit /b
:sub
command1
command2
...
commandN
Run Code Online (Sandbox Code Playgroud)
Kal*_*oni 60
如果你想要重定向out和错误的流
dir >> a.txt 2>&1
Run Code Online (Sandbox Code Playgroud)
小智 15
我知道这是一篇较旧的帖子,但有人会在谷歌搜索中偶然发现它,看起来OP在评论中提出的一些问题没有得到明确解决.另外,请放轻松,因为这是我在SO上发布的第一个答案.:)
要使用动态生成的文件名将输出重定向到文件,我的首选(读取:快速和脏)方法是@dbenham提供的第二种解决方案.例如,这个:
@echo off
> filename_prefix-%DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log (
echo Your Name Here
echo Beginning Date/Time: %DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log
REM do some stuff here
echo Your Name Here
echo Ending Date/Time: %DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log
)
Run Code Online (Sandbox Code Playgroud)
将创建一个文件,就像您在目标目录中的文件屏幕截图中看到的那样
这将包含此输出:
Your Name Here
Beginning Date/Time: 2016-09-16_141048.log
Your Name Here
Ending Date/Time: 2016-09-16_141048.log
Run Code Online (Sandbox Code Playgroud)
另请注意,此解决方案依赖于区域设置,因此请谨慎使用它.
小智 9
@echo off
>output.txt (
echo Checking your system infor, Please wating...
systeminfo | findstr /c:"Host Name"
systeminfo | findstr /c:"Domain"
ipconfig /all | find "Physical Address"
ipconfig | find "IPv4"
ipconfig | find "Default Gateway"
)
@pause
Run Code Online (Sandbox Code Playgroud)
echo some output >"your logfile"
Run Code Online (Sandbox Code Playgroud)
要么
(
echo some output
echo more output
)>"Your logfile"
Run Code Online (Sandbox Code Playgroud)
应该填写账单.
如果要APPEND输出,请使用>>而不是>.>将启动一个新的日志文件.
有一个很酷的小程序可以用来将输出重定向到文件和控制台
some_command ^| TEE.BAT [ -a ] filename
Run Code Online (Sandbox Code Playgroud)
some_command ^| TEE.BAT [ -a ] filename
Run Code Online (Sandbox Code Playgroud)
在批处理文件顶部附近添加这两行,之后的所有 stdout 和 stderr 都将重定向到 log.txt:
if not "%1"=="STDOUT_TO_FILE" %0 STDOUT_TO_FILE %* >log.txt 2>&1
shift /1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
245812 次 |
| 最近记录: |