【问题标题】:Convert Powershell command lines into .bat file将 Powershell 命令行转换为 .bat 文件
【发布时间】:2014-04-03 00:44:14
【问题描述】:

我需要重命名不同文件夹中的各种文件。在所有需要删除的文件名中都有一个前缀“f_”。
我设法在 Powershell 中使用以下行来做到这一点。

cd "C:\Users\pieter\Desktop\Folder1\Folder2\20140402_Export"
Get -ChildItem -filter "*f_*" -recurse | Rename-item -newname { $_.name -replace "f_","" }

这行得通,但我如何制作一个 .bat 呢? 我想双击一个自动执行相同工作的脚本文件。

谢谢!

【问题讨论】:

    标签: windows batch-file powershell file-rename


    【解决方案1】:

    创建一个批处理文件,然后在其中创建一个批处理文件,它将在 Powershell 线程中执行您的命令并退出。

    @powershell "cd 'C:\Users\pieter\Desktop\Folder1\Folder2\20140402_Export'; Get-ChildItem -filter "*f_" -recurse | Rename-item -newname { $_.name -replace 'f_','' }"
    

    【讨论】:

    • 我收到一个错误:“Get”一词未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。
    • 修正错字(Get 后去掉空格),但还是没有结果。也没有错误...
    • 我设法让它工作。在您的行中,您跳过了“”字符。 @powershell "cd 'C:\Users\pieter\Desktop\Folder1\Folder2\20140402_Export'; Get-ChildItem -filter "*f_" -recurse | Rename-item -newname { $_.name -replace ' f_','' }"
    【解决方案2】:

    试试这个:

    @cd /d "C:\Users\pieter\Desktop\Folder1\Folder2\20140402_Export"
    for /f "delims=" %%a in ('dir /b /a-d /s "*f_*"') do (
       set "name=%%~na"
       setlocal enabledelayedexpansion
          set "new=!name:f_=!"
          ren "%%a" "!new!%%~xa"
       endlocal
    )
    

    【讨论】:

    • +1 您可以省略"*f_*" 中的第一个*,唯一的另一个问题是它也会搜索短文件名,因此可能会出现错误匹配。如果你在 for 命令中使用它,那么它应该是非常安全的。 dir /b /a-d /s "f_*" ^| find /i "f_"
    猜你喜欢
    • 2018-08-25
    • 2018-05-04
    • 1970-01-01
    • 2012-09-21
    • 2011-03-07
    • 2010-10-22
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多