将输出同时重定向到文件和命令提示符

将输出同时重定向到文件和命令提示符

下面的代码在批处理文件中,因为我正在使用批处理文件运行 powershell 脚本。但没有给出任何输出。

我正在尝试使用为 bat 文件编写的 tee 代码,但在我的代码中实现它时遇到了问题。

有没有办法让控制台窗口显示输出并将其放入文本文件中?

xcopy "%~dp0*" "C:\windows\Temp\Check" /q /s /e /y /i
PowerShell.exe -ExecutionPolicy Bypass -File %~dp0Check.ps1 "dir | tee C:\temp\output.txt"

答案1

根据我的评论,您混合使用了不正确的语法。

%~dp0

...不是任何 PowerShell 都能理解的。与之对应的 PowerShell 是...

$PSScriptRoot

另外,您正在尝试在交换机中运行批处理/cmd 语法-File。PS 不知道那是什么。那不是文件名。

然后,您在同一行上有一个 Get-ChildIem 别名,并且它没有终止,因此,这又不是正确的 PowerShell 代码。它

PowerShell.exe -ExecutionPolicy Bypass -File %~dp0Check.ps1;"dir | tee D:\temp\output.txt"

...但同样,由于混合语法,这不是有效的 PS 代码。

PowerShell 等效于%~dp0...

$PSScriptRoot

PS 有大量特殊/保留字符,并且%是 ForEach-Object 的别名,并且“~”在 PS 中没有意义。

Get-Alias -Name '%'
# Results
<#
CommandType Name                Version Source
----------- ----                ------- ------
Alias       % -> ForEach-Object  
#>

Get-Alias -Name '~'
# Results
<#
Get-Alias : This command cannot find a matching alias because an alias with the name '~' does not exist.
#>

您只需在 PS 中执行此操作即可。

Copy-Item -Path $Source -Destination $Target -Recurse -Force | 
Tee-Object -FilePath 'C:\temp\output.txt'

...或者再次使用 Robocopy.exe。

MSDocs:robocopy

将文件数据从一个位置复制到另一个位置。

https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy

https://www.delftstack.com/howto/powershell/powershell-robocopy/

相关内容