我有一个文件列表,需要在每个文件的同一部分重命名这些文件,并使用不同的值。
示例:
BL_1402B103_abc.wav > BL_C1234-1_abc.wav
BL_15489B59_abc.wav > BL_C1234-5_abc.wav
因此,在上面的第一个示例中,我想将1402B103
替换为C1234-1
,所有文件的长度都相同,并且要替换的节用“ _
”分隔。
我有一些代码可以查找/替换文件名的一部分,但是我需要对数百个文件执行此操作-有没有办法将Pattern =和Replace =作为变量从csv / list中提取并作为批处理运行?
Setlocal enabledelayedexpansion
Set "Pattern=1402B103"
Set "Replace=C1234-1"
For %%f in (*.wav) Do (
Set "File=%%~f"
Ren "%%f" "!File:%Pattern%=%Replace%!"
)
答案 0 :(得分:0)
您可以创建一个csv
文件并添加搜索/替换字符串:
myfile.csv
1402B103,C1234-1
15489B59,C1234-5
etc,etc
批处理文件 myrename.cmd
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,* delims=," %%i in (myfile.csv) do (
set "search=%%i"
set "replace=%%j"
call :fix
)
exit /b
:fix
for %%a in (*!search!*.wav) do (
set "file=%%a"
set "file=!file:%search%=%replace%!!"
echo ren "%%~fa" "!file!"
)
它将为csv
文件中的每个字符串填充,并以逗号分隔,将第一个meta变量分配给search
变量,将第二个meta变量分配给replace
变量。然后,我们只需调用该过程即可对每个对象进行替换。
注意!在这种情况下,我在echo
之前使用了ren
来测试结果。只有对结果感到满意后,才能删除echo
来执行实际的命令。
答案 1 :(得分:0)
我将使用共享软件Total Commander及其内置的多重命名工具对文件进行这样的多重命名操作,该工具具有易于使用的图形用户界面来执行此类任务,从而可以查看文件的新名称。文件,然后执行重命名操作。使用Total Commander几乎只需单击几下鼠标即可完成此文件重命名操作,只需在键盘上键入C1234-
。如果由于某种原因重命名操作失败,Total Commander甚至支持撤消操作。
让我们假设新文件名中的C1234-
是固定的字符序列,而1
和5
是在每个重命名的文件上增加一个数字的数字。
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "FileNumber=1"
for /F "eol=| delims=" %%I in ('dir BL_????????_abc.wav /A-D-H /B /ON 2^>nul') do (
move /Y "%%I" "BL_C1234-!FileNumber!_abc%%~xI" >nul
set /A FileNumber+=1
)
endlocal
此解决方案适用于示例。
但是从文件名到文件名,从左到下划线的字符串和从右到第二下划线的字符串呢?
在这种情况下,以下批处理文件可能是正确的解决方案:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "FileNumber=1"
for /F "eol=| delims=" %%I in ('dir *_????????_*.wav /A-D-H /B /ON 2^>nul') do (
for /F "eol=| tokens=1,2* delims=_" %%A in ("%%~nxI") do (
move /Y "%%I" "%%A_C1234-!FileNumber!_%%C" >nul
)
set /A FileNumber+=1
)
endlocal
使用带有选项/Y
的命令 MOVE 而不是命令 REN 来使文件重命名,即使已经存在具有该名称的文件。 Total Commander会在将文件重命名为具有新名称的其他文件时通知用户。
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。
dir /?
echo /?
endlocal /?
for /?
move /?
set /?
setlocal /?
阅读有关Using Command Redirection Operators的Microsoft文章,以获取2>nul
的解释。当Windows命令解释器在执行命令之前处理此命令行时,重定向操作符>
必须在 FOR 命令行上使用脱字符号^
进行转义,才能被解释为文字字符。 FOR ,它将在后台启动的单独命令进程中执行嵌入式dir
命令行。
答案 2 :(得分:-2)
批处理解决方案使得很难知道该怎么做。
按我的喜好,批处理太难读了。 %%和!和!在奇怪的地方。 ah。
您最好制作一个C#控制台应用程序,该应用程序会向您提供2条提示,并且就像我一样。
无论如何,所展示的是,对于每个文件,您都将该文件名作为字符串变量获取,并在该字符串变量中进行所有字符串替换。然后,您将文件重命名,或者在C#中将其命名为MoveTo(newPath),即结果字符串变量。