【问题标题】:Difficulty with getting simple .bat to run难以运行简单的 .bat
【发布时间】:2022-12-11 17:36:30
【问题描述】:

我正在尝试运行一个简单的 .bat 来运行,它将包含空格的文件重命名为下划线。我在记事本++中创建了.bat,并在网络驱动器上运行它。这是命令:

Q:\Planning dir | Rename-Item -NewName {$_.name -replace " ", "_"}

pause

我已经在这个目录中的 PowerShell 中测试了这个脚本,就像这样,它可以工作。我还测试了我在同一目录中创建的Robocopy.bat,它也可以工作。不知道我做错了什么。我不是程序员,并且具有非常非常基本的编程技能。

谢谢你的帮助。

尝试在同一目录中的 PowerShell 中测试该命令,它有效。还尝试了 robocopy 命令和 .bat 在同一目录中包含相同的 robocopy 命令,也没有问题。我假设我有某种形式的用户错误。

我只想能够运行这个 .bat 并快速重命名文件以节省一点时间,因为这是我每天做几十次的事情。应该很容易实现自动化。

【问题讨论】:

  • 您不能直接在批处理文件中运行 powershell 命令。使用 powershell 命令调用它们。
  • Q:\Planning dir 不是 cmd.exe、powershell.exe、批处理文件 (.cmd | .bat) 或 PowerShell 脚本 (.ps1) 中的有效命令。
  • 在纯批处理中(不调用 powershell),您可以使用 String Substitution 将空格替换为下划线。
  • 从批处理文件中,最好使用 .cmd 扩展名,而不是 20 世纪的 .bat 扩展名,它看起来应该更像这样:@%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Command "Get-ChildItem -Filter '* *' | Rename-Item -NewName { $_.Name -Replace ' ', '_' }"。请注意我是如何使用完整的 cmdlet 名称 Get-ChildItem,而不是它的别名之一 gcidirls

标签: powershell batch-file file-rename


【解决方案1】:

您的脚本的问题可能是您在批处理文件中使用了 Rename-Item cmdlet,这是一个 PowerShell cmdlet。批处理文件使用一组不同的命令和语法,因此批处理文件解释器可能无法识别 Rename-Item cmdlet。

要解决此问题,您可以尝试在批处理文件中使用 ren 命令,这是一个用于重命名文件的命令行工具。 ren 命令有一个类似的 -replace 选项,您可以使用该选项将文件名中的空格替换为下划线。以下是如何在批处理文件中使用 ren 命令的示例:

Q:Planning dir | ren *.* * -replace " ", "_"

这应该通过将文件名中的空格替换为下划线来重命名 Q:Planning 目录中的所有文件。如果这对你有用,请告诉我。

【讨论】:

  • 您是在谈论名为ren 的第三方应用程序吗?因为 Windows 内置的 ren 命令绝对没有 -replace 选项。
【解决方案2】:

可能有更优雅的方法来做到这一点,但这里有一个纯批处理的例子:

REM Change to the location you need.
pushd "folder_location"
for /f "tokens=*" %%G in ('dir /b .') do (
set "_fName=%%G"
set "_fName=!_fName: =_!"
echo ren "%%G" "!_fName!"
)

完成测试以执行命令后,您可以删除 echo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多