我想以下列方式重命名文件并使用批处理文件将它们传输到库中:
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
谁知道什么是最有效的方式?
注意:文件夹名称只有一个共同的子字符串
答案 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
命令重命名文件并将其移动到目标文件夹中。
希望这有帮助。