从多个FOLDER名称中删除特定内容

时间:2018-02-08 05:51:14

标签: windows batch-file cmd directory rename

我试图获取有关尝试从多个文件夹名称中删除特定内容的信息。最好以这种方式将其放在批处理文件中。

例如。

在:

Test1 [REMOVEME]
Test2 [REMOVEME]
Test3 [REMOVEME]
Test4 [REMOVEME]

后:

Test1
Test2
Test3
Test4

我已经看到很多关于如何使用文件执行此操作的信息。但不是文件夹。这是否适用于批处理文件,以便以后可以轻松使用?或者我需要使用第三方软件吗?

另外。我使用的是Windows 10。

谢谢,Ben。

2 个答案:

答案 0 :(得分:0)

使用for /d获取匹配的foldernames,使用第二个for /f按空格分割(在第一个空格之前取部分):

@echo off
for /d %%a in ("* [remove]") do (
  for /f %%b in ("%%a") do (
    ECHO ren "%%a" "%%b"
  )
)

或者如果您更喜欢单线(不太灵活):

for /f "tokens=1,*" %%a in ('dir /b /ad "* [remove]"') do ECHO ren "%%a %%b" "%%a"

(对于这两个例子:当输出是你想要的时候删除ECHO

答案 1 :(得分:0)

可以使用PowerShell重命名目录。如果目录名称与模式匹配,Rename-Item将执行此操作。如果您确信要正确重命名目录,请从-WhatIf cmdlet中删除Rename-Item

$matchpattern = ' \[REMOVEME\]'

Get-ChildItem -Directory |
    ForEach-Object {
        if ($_.Name -match $matchpattern) {
            Rename-Item -LiteralPath $_.FullName -NewName $($_.Name -replace $matchpattern,'') -WhatIf
        }
    }

或者,可以使用Filter上的Get-ChildItem来减少工作量。但是,这需要保持两(2)种不同的匹配模式。

Get-ChildItem -Directory -Filter '* [REMOVEME]*' |
    ForEach-Object {
        Rename-Item -LiteralPath $_.FullName -NewName $($_.Name -replace ' \[REMOVEME\]','') -WhatIf
    }

编辑要在批处理文件中运行它,请将上面的代码放入renamepattern.ps1等文件中。然后,在批处理文件中运行它。

powershell -NoProfile -File .\renamepattern.ps1