拥有2,000个文件,每个文件包含51-62个字符长的文件名。对于每个文件名,我想将位置14-23中的字符拉伸添加到文件名的最开头。 (文件名字符类型和模式是可变的,因此重命名必须基于文件名开头的位置计数。) Windows 7,命令提示符FCIV解决方案首选。
例如:
原:
ABCDEFGHIJKLM的 No0123456p 8901234567890.ext
新:
No0123456p ABCDEFGHIJKLM的 No0123456p 8901234567890.ext
答案 0 :(得分:1)
@ECHO OFF
SETLOCAL
SET "sourcedir=c:\folder"
FOR /f "delims=" %%a IN (
'dir /b /a-d "%sourcedir%\*" '
) DO (
SET "name=%%a"
CALL :transform
)
GOTO :EOF
:transform
ECHO REN "%sourcedir%\%name%" "%name:~13,10%%name%"
GOTO :eof
为了测试目的,所需的REN命令仅为ECHO
。在您确认命令正确无误后,将ECHO REN
更改为REN
以实际重命名文件。
变量sourcedir
是set
,指向感兴趣的目录。通过设置变量,可以在一个位置更改目录名,而不是在多个位置使用目录名在多个位置进行编辑。 set "var=value"
语法确保该行上的任何尾随空格不包含在分配的值中。
dir
命令在目标目录中生成文件名列表/b
表示“仅文件名 - 没有标题/尾部行,没有日期,时间大小 - 只有文件名”/a-d
表示“并且没有目录名称”
此列表内置于内存中,然后由for/f
逐行读取。 "delims="
确保将整行应用于元变量%%a
,以便不截断包含默认分隔符的文件名。然后将每个文件名分配给变量name
,因为子串不能直接应用于元变量。然后执行子程序:transform
。
子程序非常简单 - 只需echo
重命名命令,使用从变量sourcedir
和name
构建的完整文件名。 ren
命令的语法要求新名称仅为名称,子目录是隐式的。新名称是从name
内的子字符串构建的,从字符13开始(第一个字符是字符0
),长度为10个字符+原始名称。
由于dir
列表是在for
开始执行之前在内存中构建的,因此传递给for
的名称是原始名称。如果文件已重命名,则不会重新处理该文件,因为其新名称不在该原始列表中。
ECHO
ren
行的想法是,用户可以查看生成的ren
命令是否正确。所有这一切都是将报告发送到屏幕。如果确定结果显示正确,则将echo ren
更改为ren
实际上将执行重命名而不是报告。这是用户做出的决定。如果结果ren
错误(错误的位置或长度计数,或错误的目录或其他),则不会造成任何损害,因为产品只是一个报告,直到作业运行echo ren
更改为{ {1}}。