编写批处理文件以重命名多个文件夹中的文件

问题描述 投票:0回答:4

我正在尝试编写一个批处理文件来重命名许多文件,文件名中的

#
符号将替换为
No.

*#*.*
*No.*.*
例如
GT #3.doc
GT No. 3.doc
所有文件都具有不同的文件扩展名。即
.txt
.doc
.docx
.xls
.dat
.mdb
等...

此外,这些文件并不位于一个文件夹中,而是位于多个文件夹和子文件夹中。

操作系统是 Win 7。我期待帮助,因为我是批处理文件的新手,并且有数百个文件需要重命名,以便迁移到不接受符号的云解决方案。谢谢你。

windows batch-file batch-rename
4个回答
0
投票

自从几年前 powershell 出来后,我就忘记了如何使用批处理。 Powershell 有一个简单的方法可以做到这一点。

$target = "Your Path"
Get-ChildItem -path $target -Recurse -Include *#* | rename-item -NewName { $_.name -replace '#','NO'}

-recurse 将遍历所有文件夹,-include 将过滤其中包含 # 的文件并将其通过管道传输到 rename-item。 Rename-item 有一个替换功能,只能用您想要的任何内容替换指定的部分。


0
投票

这个应该可以做到:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem // Define constants here:
set "ROOT=D:\path\to\root\folder\"
set "PATTERN=*#*.*"
set "SEARCH=#"
set "REPLAC=No. "

for /R "%ROOT%" %%I in ("%PATTERN%") do (
    set "FILENAME=%%~nI"
    setlocal EnableDelayedExpansion
    set "FILENAME=!FILENAME:%SEARCH%=%REPLAC%!"
    ren "%%~fI" "!FILENAME!%~xI"
    endlocal
)

endlocal
exit /B

0
投票

谢谢 aschipfl :)

你的意思是这样吗?

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem // Define constants here:
set "ROOT=D:\path\to\root\folder\"
set "PATTERN=version.exe"
set "SEARCH=version"
set "REPLAC=v"

for /R "%ROOT%" %%I in ("%PATTERN%") do (
    set "FILENAME=%%~nI"
    setlocal EnableDelayedExpansion
    set "FILENAME=!FILENAME:%SEARCH%=%REPLAC%!"
    ren "%%~fI" "!FILENAME!%~xI"
    endlocal
)

endlocal
exit /B

还要重命名所有包含“version”一词的文件夹和所有嵌套子文件夹以更改为“v”?


0
投票

我正在尝试重命名名称中包含 p-01- 的所有文件夹中的所有文件

@echo on
chcp 65001 >NUL
setlocal EnableExtensions DisableDelayedExpansion

rem // Define constants here:
set "ROOT=%~dp0"
set "PATTERN=*p-01-*.*"
set "SEARCH=p-01-"
set "REPLAC=P-99-"

for /R "%ROOT%" %%I in ("%PATTERN%") do (
set "FILENAME=%%~nI"
setlocal EnableDelayedExpansion
set "FILENAME=!FILENAME:%SEARCH%=%REPLAC%!"
rename "%%~fI" "!FILENAME!%~xI"
endlocal
)

endlocal
exit /B

脚本不做任何事情。 日志输出:

d:\test>chcp 65001  1>NUL 
d:\test>setlocal EnableExtensions DisableDelayedExpansion 
d:\test>rem // Define constants here: 
d:\test>set "ROOT=d:\test\" 
d:\test>set "PATTERN=*p-01-*.*" 
d:\test>set "SEARCH=p-01-" 
d:\test>set "REPLAC=P-99-" 
d:\test>    rename "%~fI" "!FILENAME!!%~xI"

我做错了什么?

© www.soinside.com 2019 - 2024. All rights reserved.