[英]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.