我正在编写一个批处理文件,我正在运行一个由我自己编写的exe文件。我正在重定向标准输出以及特定文件中的标准错误输出。
批处理文件中的命令如下所示:
"MyExe.exe" /weekly config.xml > "C:\MyPath\testlog.log" 2>&1
只要我从命令行执行命令,一切正常。我的应用程序的输出显示在同一个命令窗口中。 testlog.log然后包含我在命令窗口中看到的所有输出。
只要我从批处理文件运行它,除了批处理文件打开的命令窗口之外,还会打开一个新的第二个窗口,并显示我的应用程序的输出。应用程序完成后,第二个窗口关闭,我的批处理文件中的其余操作将被执行。日志文件本身是空的。
我已经知道有不同的流程,并且一个的输出无法重定向到另一个。
这就是为什么我在批处理文件中使用start
命令让输出显示在批处理文件打开的命令窗口中。
我已经尝试过这些解决方案:
start /wait /b "MyExe.exe" /weekly config.xml > "C:\MyPath\testlog.log" 2>&1
start /b "C:\FullPath\MyExe.exe" /weekly config.xml > "C:\MyPath\testlog.log" 2>&1
但它们都没有使我的应用程序的输出显示在同一个命令窗口中。
此外,我已经尝试了this和this问题的所有解决方案。我总是得到一个空输出或一个空文件。
甚至可以在调用它时重定向我的应用程序的输出吗?或者它取决于应用的类型,例如控制台/ Windows应用程序?
编辑:这是我的批处理文件:
SET LOGS_LOCAL="C:\MyAgent\EXE\logs\*.log"
SET LOGS_SERVER="\\MyServer\Backups\weekly\logs"
SET SOURCE_ARCHIVES="C:\MyAgent\Backups\weekly\*.zip"
SET TARGET_ARCHIVES_SERVER="\\MyServer\Backups\weekly"
SET CONFIGFILE="config.xml"
SET COUNTER=0
SET MAXLOGS=30
SET Timestamp=%date:~6,4%-%date:~3,2%-%date:~0,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%
echo %Timestamp%
pause
REM Run the exe
"MyExe.exe" /weekly %CONFIGFILE% > "C:\MyAgent\EXE\logs\log %Timestamp%.log" 2>&1
pause
REM Check return value of exe
IF %ERRORLEVEL% EQU 0 OR %ERRORLEVEL% GEQ 8 (
REM Get latest local archive and copy on server
FOR /F "delims=|" %%I IN ('DIR %SOURCE_ARCHIVES% /B /O:D /S') DO SET NewestArchive=%%I
copy "%NewestArchive%" %TARGET_ARCHIVES_SERVER%
REM Get local count of logs
for %%A in (%LOGS_LOCAL%) do set /a COUNTER+=1
REM Delete oldest log whne maximum is reached
IF %COUNTER% LEQ %MAXLOGS% (
REM Everything fine, no work to be done
) else (
REM Get oldest log
FOR /f "delims=|" %%a in ('dir %LOGS_LOCAL% /t:c /a:-d /o:-d /b /s') do set OldestLog="%%a"
REM Delete oldest log
DEL %OldestLog%
)
)
答案 0 :(得分:0)
您可以通过以下方式使用脚本命令:
$script out.txt
然后您可以正常执行程序。
完成后,从键盘CRTL+D
按下