Batch file 重命名文件以删除文件名批处理脚本的一部分

Batch file 重命名文件以删除文件名批处理脚本的一部分,batch-file,Batch File,我有以下表格中的一些文件: …其中filename1,filename2等可以包含空格、符号,,但不能包含数字。而extra1,extra2等可以包含任何内容。用空格括起来的文件名中的数字在相同的filename1,filename2等中不会重复 我想要的是删除包含它的文件中的额外内容。也就是说,从filename2015 extra100.ext到filename2015.ext 我的第一次尝试是: @echo off setlocal EnableExtensions EnableDelay

我有以下表格中的一些文件:

…其中
filename1
filename2
等可以包含空格、符号
,但不能包含数字。而
extra1
extra2
等可以包含任何内容。用空格括起来的文件名中的数字在相同的
filename1
filename2
等中不会重复

我想要的是删除包含它的文件中的额外内容。也就是说,从
filename2015 extra100.ext
filename2015.ext

我的第一次尝试是:

@echo off
setlocal EnableExtensions EnableDelayedExpansion

set "FILE=file name 11 con sosas extras 2.txt"
set "ext=txt"
set "folder=."

for /F "tokens=1,* delims=0123456789" %%A in ("!FILE!") do (set "EXTRA=%%B")
set "FIRST=!FILE:%EXTRA%=!"
set "filename=!FIRST!.!ext!"
echo !EXTRA!
echo !filename!
echo rename "!folder!\!FILE!" "!filename!"
这似乎有效,但如果我将其更改为接收参数,则不会:

@echo off
setlocal EnableExtensions EnableDelayedExpansion

set "FILE=%1"
set "ext=%2"
set "folder=%3"

for /F "tokens=1,* delims=0123456789" %%A in ("!FILE!") do (set "EXTRA=%%B")
set "FIRST=!FILE:%EXTRA%=!"
set "filename=!FIRST!.!ext!"
echo !EXTRA!
echo !filename!
echo rename "!folder!\!FILE!" "!filename!"
其中%1是文件名,%2是扩展名,%3是存放文件的文件夹。也许,扩展可以在批处理中提取,但我不知道如何做

另一方面,我计划将此批次用于另一批次。在那里,
(*.txt)
中将有一个for循环,我不知道如何区分有额外内容(然后调用此批处理)的文件和没有额外内容(然后不调用此批处理)的文件


关于,请使用您的方法提取“额外部分”。在第二步中,移除该额外部分:

@echo off
setlocal enabledelayedexpansion

set "FILE=file name 11 con sosas extras 2.txt"

for /f "tokens=1,* delims=1234567890" %%a in ("%file%") do set new=!file:%%b=!%%~xb
echo %new%

%%~xb
为您提供了ex张力。

这是一个批处理脚本,用于查找包含在空格内的第一个纯数字字符串部分,或者如果它出现在结尾,前面有空格,则出现在不包含空格的其他文本之后。找到的编号前面的部分后跟一个空格,后跟编号本身,用于构建新文件名

这种方法可以正确处理文件名的所有有效字符,即使是
^
&
%

下面是代码:

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“\u源=。\test”
对于/F“eol=| delims=”%%F in('
目录/B“%\u源%\*.ext”^ findstr/R/I^
/C:“^..*[0123456789][0123456789]*\.ext$”^
/C:“^..*[0123456789][0123456789]*.\.ext$”
""做"(
设置“文件=%%F”
调用:拆分第一个剩余数“%%~nF”
如果定义了NUM(
setlocal EnableDelayedExpansion
ECHO重命名“!\u SOURCE!\!FILE!”!FIRST!!NUM!%%~xF”
端部
)
)
端部
退出/B
:拆分rtn\u第一个rtn\u num rtn\u剩余值\u字符串
setlocal DisableDelayedExpansion
set“RMD=“&set”NUM=“&set”STR=%~4”
:循环
对于/F“tokens=1,2,*delims=“%%I in”(“%STR%”)do(
如果不是“%%J”==”“(
(对于/F“delims=0123456789”%%L in(“%%J”)do rem/)&&(
如果不是“%%K”==”“(
设置“STR=%%J%%K”
转到:循环
)
) || (
设置“NUM=%%J”
如果不是“%%K”==”“(
设置“RMD=%%K”
)
)
)
)
设置“STR=%~4”
如果未定义NUM goto:退出
设置“STR=%STR%”
调用集“STR=%%STR:%NUM%=|%%”
对于(“%STR:^^=^%”中的/F“delims=|”%%L,请设置“STR=%%L”
:退出
(
端部
设置“%~1=%STR%”
设置“%~2=%NUM%”
设置“%~3=%RMD%”
)
退出/B

测试完脚本后,删除大写的
ECHO
命令以实际重命名任何文件。

因此,根据您的示例,最终文件名应该类似于
filename1.ext
,对吗?那么空格内的数字也需要删除吗?它应该是从
filename1 15 extra100.ext
filename1 15.ext
如果额外部分也出现在前面的文件名部分中,恐怕这会失败;此外,一些字符会引起麻烦:
=
~
(在开始时)…谢谢!!我通过添加_源和扩展作为入口参数来修改它。我可以在另一个脚本中运行此脚本而不出现问题吗?我更喜欢将此脚本保存在一个单独的文件中…要将此脚本保存在一个单独的文件中,请使用,然后它应该可以正常工作。。。
@echo off
setlocal enabledelayedexpansion

set "FILE=file name 11 con sosas extras 2.txt"

for /f "tokens=1,* delims=1234567890" %%a in ("%file%") do set new=!file:%%b=!%%~xb
echo %new%