繁体   English   中英

如何通过批处理脚本批量重组文件名

[英]How can I restructure file names on bulk via batch script

我在一台 Windows 10 机器上有 324 个文件,它们按以下模式命名:

[7 Numbers] [Space] [Last name] [Space] [First name]

我需要他们是:

[Last name] [Space] [First name] [Space] [7 Numbers] 

我做了一些快速研究,发现我可以使用“重命名”function 编写批处理脚本:

@echo off
rename “y:\*.txt” “???-Test1.*”

但是,我无法找到如何对脚本进行编程以获取前 7 个字符并将它们放在最后。

任何帮助表示赞赏。

考虑到关于你的结构的确切格式的小细节,即如果姓氏像van Halen这样现在也包含一个空格的分裂会发生什么:无论如何,这将迎合你所提到的情况,而不是包含空格的名称/姓氏。

@echo off
for /f "tokens=1-3*" %%i in ('dir /b /a-d *.txt ^| findstr /R "^[1-9]"') do echo ren "%%i %%j %%k" "%%~nk %%~nj %%~ni%%~xk"

请注意,此示例将简单地echo显命令而不执行实际的重命名。 在进行重命名之前,您需要先对其进行测试。 一旦您对打印到控制台的结果感到满意,然后从该行中删除echo

笔记。 findstr在这里很重要,因为我们只需要在文件以数字开头时执行操作。 如果你想更具体,你可以定义更多的findstr过滤器。 在这里我只关注任何.txt文件开头的数字,考虑到名字或姓氏不应该以数字开头。,除非你是 50cent 或其他随机说唱歌手。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION 
rem The following setting for the source directoryis a name
rem that I use for testing and deliberately includes spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.

SET "sourcedir=u:\your files\t w o"

FOR %%b IN ("%sourcedir%\??????? * *.txt") DO FOR /f "tokens=1*delims= " %%u IN ("%%~nb") DO SET /a junk=0&SET /a "junk=1%%u" 2>nul&IF !junk! geq 10000000 IF !junk! leq 19999999 ECHO REN "%%b" "%%v %%u.txt"

GOTO :EOF

请注意,此例程使用delayedexpansion

第一个for将与掩码匹配的每个文件的绝对文件名放入%%b

第二个将文件名( %%~nb )的名称部分划分为第一个空格(标记 1)到%%u和其余部分(标记 *)到%%v之前的那个部分

然后将junk设置为 0,然后重置为1%%u的值。 如果%%u不是数字字符串( 2>nul抑制错误消息), set /a将保持junk不变(因此为 0),因此如果%%u是数字,则junk将设置为10000000 ... 19999999

使用!junk! 要访问junk的运行时值,请检查它是否在范围内,如果是,则echo显所需的ren

检查结果报告以实际重命名文件后,删除ren之前的echo关键字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM