下面的代码在批处理文件中,因为我正在使用批处理文件运行 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/