1

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

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

有谁知道最有效的方法是什么?

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

4

1 回答 1

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!从 中提取最后 2 个字符fbase,即运行索引。
假设运行索引正好是两个字符。

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

希望这可以帮助。

于 2012-08-21T07:05:14.223 回答