簡體   English   中英

如何將批處理腳本的輸出打印到文件中,而不會影響它在腳本上的顯示方式

[英]How to print the output of a batch script to a file w/out affecting how it displays on the script

我有一個打印大量信息的腳本,但也需要用戶輸入。

我需要能夠在命令窗口中看到顯示內容,而且還需要將屏幕上的輸出打印到日志文件中。

-------------------------------
Info Here
-------------------------------
What is your favorite color? Blue

You sad your favorite color is "Blue".
Executing: AttackByBunny.exe

我更喜歡一種可以設置在最頂部並適用於以下所有內容的方法。

SET ECHO OFF
SET FILEOUTPUT FILE.log
exec monty.exe

使用 jtee.bat 嘗試更新:
這似乎不適用於下面的腳本。 它只是在call mvn ...行上退出。 暫停僅用於調試目的。

更新腳本:

@echo off
set RELEASE_BRANCH=PROD_Release_7_0
echo Using NON_PROD_ENV/%RELEASE_BRANCH% | jtee.bat %RELEASE_BRANCH%.log
pause
if exist %RELEASE_BRANCH% (
    echo Running svn update %RELEASE_BRANCH% | jtee.bat %RELEASE_BRANCH%.log 1
    svn update %RELEASE_BRANCH% | jtee.bat %RELEASE_BRANCH%.log 1
) else (
    echo Running svn co https://svn_rep/branches/releases/NON_PROD_ENV/%RELEASE_BRANCH% | jtee.bat %RELEASE_BRANCH%.log 1
    svn co https://svn_rep/branches/releases/NON_PROD_ENV/%RELEASE_BRANCH% | jtee.bat %RELEASE_BRANCH%.log 1
)
pause
cd %RELEASE_BRANCH%
pause
call mvn clean release:clean release:prepare -DpreparationGoals="install" -DcompletionGoals="install versions:use-next-snapshots versions:commit" -Darguments='-Dmaven.test.skip=true' | jtee.bat ../%RELEASE_BRANCH%.log 1

pause

這是我在上面的評論中提到的 .NET 方法的完整說明。 這是一個批處理 + PowerShell 混合腳本(使用 .bat 擴展名保存它),它將運行它的控制台窗口的緩沖區內容保存到一個名為“buffer.log”的文件中。

<# : Batch portion (PowerShell multi-line comment)
@echo off & setlocal

call :saveBuffer buffer.log
goto :EOF

:saveBuffer <outputfile>
set "logfile=%~f1"
powershell -noprofile -noninteractive "iex (${%~f0} | out-string)"
goto :EOF

: end batch / begin PowerShell hybrid chimera #>
$w = $Host.UI.RawUI.WindowSize.Width - 1
$h = $Host.UI.RawUI.CursorPosition.Y - 1
$rect = New-Object Management.Automation.Host.Rectangle 0, 0, $w, $h
$buffer = $Host.UI.RawUI.GetBufferContents($rect)
$lineBuilder = New-Object System.Text.StringBuilder
$out = New-Object System.Text.StringBuilder

# for older .NET compatibility
if (-not $lineBuilder.Clear) {
    $lineBuilder | Add-Member ScriptMethod Clear {$this.Length = 0}
}

foreach ($byte in $buffer) {
    [void]$lineBuilder.Append($byte.character)
    if (-not (++$x % ($w + 1))) {
        # End of line reached.  Append right-trimmed line to $out and start a new line.
        [void]$out.AppendLine($lineBuilder.ToString().TrimEnd())
        [void]$lineBuilder.Clear()
    }
}

# Write log file.  For UTF8, change encoding to utf8
$out.ToString() | out-file $env:logfile -encoding Default -width $w -force

在這里你可以找到沒有外部二進制文件的 windows tee 命令 如果你調用文件jtee.bat你可以像這樣使用它:

someCommand.exe arguments | jtee.bat FILE.log 1

如果文件已經存在,則末尾的1告訴腳本追加日志。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM