【问题标题】:Removing specific thing from multiple FOLDER names [closed]从多个文件夹名称中删除特定的东西[关闭]
【发布时间】:2018-07-18 14:38:17
【问题描述】:

我正在尝试获取有关尝试从多个文件夹名称中删除特定内容的信息。最好以可以在批处理文件中的方式进行。

例如。

之前:

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

之后:

Test1
Test2
Test3
Test4

我已经看到了大量有关如何处理文件的信息。但不是文件夹。这对批处理文件是否可行,以便以后可以轻松使用?还是我需要使用第三方软件?

还有。我正在使用 Windows 10。

谢谢,本。

【问题讨论】:

  • 看看这个帖子???? stackoverflow.com/questions/17271586/…
  • 请拨打tour,阅读How to Askminimal reproducible example。 “是否可行”或“是否可能”形式的问题不是好的 SO 问题。通常是有可能的,真正的问题是,您是否费心进行研究并尝试自己解决这个问题?您甚至在 SO 上搜索过类似的问题吗?
  • 我敢打赌,你的名字中实际上并没有 []。
  • @GerhardBarnard - 我不明白这有什么关系,因为他需要做的就是使用子字符串替换。
  • 奇怪的是,当您在 cmets 中发布的代码是 Powershell 时,您已标记此问题 [batch-file]。 (另外,我不知道 Powershell,但我猜 *.mp3 会阻止您获取目录名称。)

标签: windows batch-file cmd directory rename


【解决方案1】:

使用for /d 获取匹配的文件夹名称,使用第二个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,当输出是你想要的)

【讨论】:

  • 单行在这样的批处理文件中完美运行:for /f "tokens=1," %%a in ('dir /b /ad " [YTS.AG]"') do ren "%%a %%b" "%%a" 非常感谢!
【解决方案2】:

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

$matchpattern = ' \[REMOVEME\]'

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

或者,可以通过在Get-ChildItem 上使用Filter 来减少工作量。但是,这需要维护两 (2) 个不同的匹配模式。

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

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

powershell -NoProfile -File .\renamepattern.ps1

【讨论】:

  • 感谢您的帮助。把这个: $matchpattern = ' \[YTS.AG\]' Get-ChildItem -directory | ForEach-Object { if ($_.Name -match $matchpattern) {Rename-Item -LiteralPath $_.FullName -NewName $($_.Name -replace $matchpattern,'') } } 进入 Powershell 确实有效。但不在批处理文件中。我尝试用实际目录替换“目录”,但它说找不到它。我错过了什么吗?或者我不能把它简化到一个批处理文件中吗?
  • @BenBraskusCole - 我已经编辑了答案以显示如何在批处理文件中运行它。此代码是 PowerShell。它不是 cmd.exe .bat 脚本。在许多情况下,所选答案不会产生正确的结果。尝试一个名为 First Test [REMOVEME] 的目录。
猜你喜欢
  • 2018-06-21
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 2014-04-22
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多