gpt4 book ai didi

windows - 批处理文件中的错误处理

转载 作者:可可西里 更新时间:2023-11-01 11:24:29 26 4
gpt4 key购买 nike

我正在编写一个脚本来自动执行一些任务。本质上,它只是重命名文件(如果存在)。但是,这些文件对于某些其他软件的运行至关重要。如果重命名文件失败,或者找不到文件,我希望它说出它是哪个文件。但是,REN 命令在失败时的描述性并不强。我知道如果它失败了,它会将 ERRORLEVEL 提高到 1。我是否可以从失败中获得任何其他信息,比如文件名?还是仅仅是成功或失败?

这将运行的机器是 Windows 7 及更高版本,因此如果需要,powershell 也是一个选项,但我更喜欢批处理。

谢谢

最佳答案

作为Ken White在对该问题的评论中指出,cmd.exeren 命令发出的错误消息包含文件名(s) 涉及

相比之下,

PowerShell 提供详细的错误消息,确实包含文件名
采用以下示例脚本:

# Create helper sample files.
$tempFiles = "$env:TEMP\foo", "$env:TEMP\bar"
$null = New-Item -Type File $tempFiles

# Try to rename a nonexistent item.
Rename-Item \no\such -NewName foo

# Try to rename to a file that already exists.
Rename-Item $env:TEMP\foo -NewName bar

# Clean up the sample files.
Remove-Item $tempFiles

如果将以上内容保存到 *.ps1 文件并运行它(假设您有 permitted scripts to run ),您将看到以下错误输出:

Rename-Item : Cannot rename because item at '\no\such' does not exist.
At C:\Users\jdoe\Desktop\pg\pg.ps1:8 char:5
+ Rename-Item \no\such -NewName foo
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand

Rename-Item : Cannot create a file when that file already exists.
At C:\Users\jdoe\Desktop\pg\pg.ps1:11 char:5
+ Rename-Item $env:TEMP\foo -NewName bar
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (C:\Users\jdoe\AppData\Local\Temp\foo:String) [Rename-Item], IOException
+ FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand

虽然输出很冗长,但它确实包含所有相关信息,您甚至可以以编程方式检查它,通过自动 $Error 变量,其中包含所有错误在 session 中按时间倒序报告($Error[0] 包含最近的 错误)。

并不是说,默认情况下,PowerShell 脚本会在这些错误发生时继续运行,因为它们被认为是非终止

  • 使脚本立即中止的最简单方法是使用 $ErrorActionPreference= 'Stop' 行启动脚本。

  • 或者,您可以在每个命令 的基础上使用-ErrorAction Stop

运行 Get-Help about_Preference_VariablesGet-Help about_CommonParameters了解更多。

关于windows - 批处理文件中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44189614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com