如何通过在 Windows 中使用批处理替换子字符串来重命名文件 [关闭]

Posted

技术标签:

【中文标题】如何通过在 Windows 中使用批处理替换子字符串来重命名文件 [关闭]【英文标题】:How to rename file by replacing substring using batch in Windows [closed] 【发布时间】:2013-04-14 06:40:40 【问题描述】:

我想将 "how-to-rename-file.jpg" 等文件名重命名为 "how-to-reuse strong>-file.jpg" 使用 Windows 批处理文件

即我只想替换文件名中的一两个单词。

【问题讨论】:

请添加您尝试过的内容。另外,我们需要更多信息。 考虑尝试Bulk Rename Here。 @casperOne 嗯……我觉得有点太严格了。 【参考方案1】:
@echo off

Set "Filename=how-to-rename-file.jpg"
Set "Pattern=rename"
Set "Replace=reuse"

REM Call Rename "%Filename%" "%%Filename:%Pattern%=%Replace%%%"

Call Echo %%Filename:%Pattern%=%Replace%%%
:: Result: how-to-reuse-file.jpg

Pause&Exit

我给你另一个文件循环的例子:

更新:

我在语法中遗漏了一些东西,因为我上次编辑时快速键入,这里是更正的代码:

@echo off
Setlocal enabledelayedexpansion

Set "Pattern=rename"
Set "Replace=reuse"

For %%# in ("C:\Folder\*.jpg") Do (
    Set "File=%%~nx#"
    Ren "%%#" "!File:%Pattern%=%Replace%!"
)

Pause&Exit

PS:您可以在此处阅读以了解有关子字符串的更多信息: http://ss64.com/nt/syntax-substring.html http://ss64.com/nt/syntax-replace.html

【讨论】:

第二个代码正是我所需要的。非常感谢您的帮助。还要感谢您为我提供链接以了解有关字符串的更多信息,我发现此链接非常有用:-) 你为什么用Set "File=%%~nx#"而不是简单的Set "File=%%#" @Marco Demaio 在保留的 For 修饰符中引入新用户。 @ElektroStudios 抱歉,“介绍新用户”是什么意思?什么用户? 不幸的是,这似乎无法替换“特殊”字符,例如 ç 或 õ。【参考方案2】:

上面的代码没有重命名文件 - 路径有问题,源文件名不正确。

这将适用于当前文件夹中的文件 - 带有 ! 的文件除外名字会有问题。

@echo off
Setlocal enabledelayedexpansion

Set "Pattern=rename"
Set "Replace=reuse"

For %%a in (*.jpg) Do (
    Set "File=%%~a"
    Ren "%%a" "!File:%Pattern%=%Replace%!"
)

Pause&Exit

【讨论】:

我知道这是一个老话题,但是我应该添加什么来定义文件夹而不是使用本地文件夹? pushd "c:\folder"放在循环上方,或使用cd /d "c:\folder" 它就像一个魅力!好东西! 请注意,我认为Set "File=%%~a" 可以替换为Set "File=%%a"(没有~),因为~ 与您不使用的参数扩展一起使用。 ss64.com/nt/syntax-args.html 这很好用。现在你可以让它在子文件夹上递归吗?

以上是关于如何通过在 Windows 中使用批处理替换子字符串来重命名文件 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

通过 Windows 批处理文件将字符串替换为文本文件中的 unicode

如何在环境变量PATH中搜索和替换字符串?

如何在 Windows 上有效地“替换”`os.execvpe` - 如果“子”进程是交互式命令行应用程序?

替换从字符开始并以另一个字符结束的文本文件中的子字符串

从文件夹中所有文件的文件名中替换或删除某些字符[关闭]

如何在JAVA中用不同的子字符串替换字符串的子字符串?