在批处理中重命名和移动文件

时间:2012-08-21 02:26:05

标签: batch-file dos file-rename

我想以下列方式重命名文件并使用批处理文件将它们传输到库中:

c:\jg_Folder_xy>
blabla01_000.bla --> blabla01_001.bla
blabla02_000.bla --> blabla02_001.bla
blabla03_000.bla --> blabla03_001.bla

c:\sj_Folder_mx>
blabla01_000.bla --> blabla01_002.bla
blabla02_000.bla --> blabla02_002.bla
blabla03_000.bla --> blabla03_002.bla

c:\an_Folder_kj>
blabla01_000.bla --> blabla01_003.bla
blabla02_000.bla --> blabla02_003.bla
blabla03_000.bla --> blabla03_003.bla

并将全部转移到新文件夹

c:\New_Folder>
blabla01_001.bla
blabla01_002.bla
blabla01_003.bla
blabla02_001.bla
blabla02_002.bla
blabla02_003.bla
blabla03_001.bla
blabla03_002.bla
blabla03_003.bla
谁知道什么是最有效的方式?

注意:文件夹名称只有一个共同的子字符串

1 个答案:

答案 0 :(得分:3)

怎么做

以下是批处理的简单解决方案:

@echo off
setlocal enabledelayedexpansion
set "SRC_PATH=c:\jg_Folder_xy"
set "DEST_PATH=c:\New_Folder"
for %%f in ("%SRC_PATH%"\*.bla) do (
    set fname=%%~nf
    set fbase=!fname:~0,-4!
    set findex=!fbase:~-2!
    move %%f "%DEST_PATH%"\!fbase!_0!findex!%%~xf
)

注意:此脚本必须分别在每个源文件夹上运行(每次更改SRC_PATH)。或者,您可以将for循环修改为双循环,如下所示:

for /d %%d in (*_Folder_*) do for %%f in ("%%d"\*.bla) do (

以便它会自动遍历所有所需文件夹中的所有文件(不需要SRC_PATH行)。

如何运作

for循环遍历源文件夹中的文件,并在每次迭代中将文件名(带完整路径)分配给%%f

set fname=%%~nf提取文件名并删除扩展名。

set fbase=!fname:~0,-4!获取除最后4个字符以外的所有字符(即。删除“_000”)。
这基本上提取了基本文件名,在你的例子中是“blabla01”,“blabla02”....

set findex=!fbase:~-2!fbase中提取最后2个字符,即正在运行的索引 假设运行索引恰好是两个字符。

move命令重命名文件并将其移动到目标文件夹中。

希望这有帮助。