我已经直接在 PowerShell 中编写了一行 PowerShell 代码并且它运行完美,但我无法让 .bat 来运行它。
我认为我的 PowerShell 脚本的运行已被公司阻止。
如果我可以在 CMD 中获得相同的结果,那么它将解决该问题。
以下是 PowerShell 代码:
CD C:\Temp
Get-ChildItem -Filter "*-Layout1*" -Recurse | Rename-Item -NewName {$_.name -replace ‘-Layout1’,'' }
此代码将 PLANVIEW-Layout1.pdf 转换为 PLANVIEW.pdf,但它将采用带有 -Layout1 的任何文件名并删除 -Layout1。
我的 CAD 程序在创建 .pdf 时会在文件名中添加“-Layout1”或“-Model1”。
我有时会创建数百个 PDF,然后逐个重命名它们很麻烦。
如果我在 PowerShell 窗口中输入上述 PowerShell 代码,它就能完美运行。
我希望其他用户也能使用它,而不必每次都输入所有代码。
编辑:抱歉,评论有点乱...当我
@echo off PowerShell.exe -noexit -ExecutionPolicy Bypass -File "MyScript.ps1" Pause
使用 MyScript.ps1运行此 .bat 时:
CD C:\Temp Get-ChildItem -Filter "*-Layout1*" -Recurse | Rename-Item -NewName {$_.name -replace ‘-Layout1’,'' }
我现在在 CMD 中得到了这个:
You must provide a value expression on the right-hand side of the '-replace' operator. At C:\Temp\MyScript.ps1:3 char:85 * Get-ChildItem -Filter "-Layout1" -Recurse | Rename-Item -NewName {$_.name -replace <<<< a?~-Layout1a?T,'' } + CategoryInfo :ParserError: (:) []. ParentContainsErrorRecordException + FullyQualifiedErrorId :ExpectedValueExpression
答案1
关于错误输出和 ps1 代码,似乎‘-Layout1’周围的“ ' ”引号无法很好地识别。
您可以尝试用这样的简单引号来替换它们:
Get-ChildItem -Filter "*-Layout1*" -Recurse | Rename-Item -NewName {$_.name -replace '-Layout1','' }