我还没有真正搞乱批处理文件,但鉴于我们的工作环境,这是我们唯一的解决方案。
我们有一堆文件格式如下:
ICN-A10-C-232101-H-8X662-00001-A-05-U
ICN-A10-C-232101-H-8X662-00002-A-01-U
ICN-A10-C-232101-H-8X662-00003-A-00-U
ICN-A10-C-232101-H-8X662-00004-A-92-U
我们需要删除最后一个数字集并跟随连字符,所以他们读取如下:
ICN-A10-C-232101-H-8X662-00001-A-U
ICN-A10-C-232101-H-8X662-00002-A-U
ICN-A10-C-232101-H-8X662-00003-A-U
ICN-A10-C-232101-H-8X662-00004-A-U
同样,* .bat文件看起来是我们唯一的解决方案。
非常感谢任何帮助。
答案 0 :(得分:1)
抱歉,没有正则表达式
for /f "tokens=1-11 delims=-" %%a in ('
dir /b /a-d *
') do if "%%k"=="" if not "%%j"=="" (
echo ren "%%a-%%b-%%c-%%d-%%e-%%f-%%g-%%h-%%i-%%j" "%%a-%%b-%%c-%%d-%%e-%%f-%%g-%%h-%%j"
)
重命名操作仅回显给控制台。如果输出正确,请删除echo
命令。
答案 1 :(得分:1)
您可以使用这个有点奇怪的技巧:
@echo off
setlocal enabledelayedexpansion
cd files
for %%a in (*) do (
set "name=%%a"
for %%b in ("!name:-=.!") do for %%c in ("%%~Nb") do (
set "newName=%%~Nc%%~Xb"
ECHO ren %%a !newName:.=-!
)
)
也就是说,通过-
更改.
并使用两个嵌套的FOR命令来消除最后两个扩展。然后,使用原始扩展名重新组合剩余的名称,并通过夸大更改点:
C:\> dir /B files
ICN-A10-C-232101-H-8X662-00003-A-00-U
ICN-A10-C-232101-H-8X662-00002-A-01-U
ICN-A10-C-232101-H-8X662-00001-A-05-U
ICN-A10-C-232101-H-8X662-00004-A-92-U
C:\> test
ren ICN-A10-C-232101-H-8X662-00003-A-00-U ICN-A10-C-232101-H-8X662-00003-A-U
ren ICN-A10-C-232101-H-8X662-00002-A-01-U ICN-A10-C-232101-H-8X662-00002-A-U
ren ICN-A10-C-232101-H-8X662-00001-A-05-U ICN-A10-C-232101-H-8X662-00001-A-U
ren ICN-A10-C-232101-H-8X662-00004-A-92-U ICN-A10-C-232101-H-8X662-00004-A-U
答案 2 :(得分:0)
您可以在要重命名的文件所在的目录上使用rename
命令。
rename 's/\d+-(?=\D*$)//' *
上面的正则表达式只会匹配数字加上以下-
符号,只要它后跟零个或多个非数字字符以及行锚点的结尾。