批处理文件:根据输入的字符数删除文件名前缀

时间:2019-01-28 06:51:27

标签: batch-file

我正在寻找一个批处理文件,该文件将从文件夹中的文件中删除特定的前缀。

例如将“ 1 File1.txt”和“ 1 File2.txt”分别重命名为File1.txt和File2.txt。 问题在于前缀的长度可以变化。这是我的代码:

@echo off
Set /p Prefix = Enter the prefix to eliminate:
rename "%Prefix%*.txt" "//*.txt"

有没有办法使斜杠(要删除的字符)数量等于用户输入的字符数量?还是实现同一目标的另一种方法?

编辑:无意中将文件列出为“ 1 File1.txt和2 File2.txt”-这意味着是“ 1 File1.txt和1 File2.txt”-所有文件都具有相同的前缀(在这种情况下,前缀只是“ 1”

2 个答案:

答案 0 :(得分:0)

如果要自动删除前缀,请使用示例文件1 file1.txt 2 file2txt

@echo off
set /p "input=Enter Prefix to search: "
for /f %%a in ('dir /b /a-d %input%*.txt') do (
   for /f "tokens=1,*" %%i in (%%a) do if not "%%i"=="" if not "%%j"=="" echo move "%%a" "%%j"
)

它将提示用户输入要搜索的前缀,即1,然后搜索包含1*.txt的所有内容,并在没有第一个分隔符的情况下对其进行重命名。 因此,即使用户添加255作为前缀,它也会搜索任何255*.txt(请注意,在我的set命令中,在=之前或之后没有空格。

此示例将仅回显move命令,而不实际移动文件,如果要执行实际任务,请从最后一个for循环中删除echo命令。

请记住,如果文件名为1 and file1.txt,则由于and file1.txt的原因,它将文件重命名为tokens=1,*。此外,根据您的示例,我们仅对包含空格的文件运行此文件,而不是_ -等,但是可以根据需要进行更改。

最后,您也可以自动重命名所有文件,而无需提示用户。即

@echo off
for /f %%a in ('dir /b /a-d *.txt') do (
   for /f "tokens=1,*" %%i in (%%a) do if not "%%i"=="" if not "%%j"=="" echo move "%%a" "%%j"
)

答案 1 :(得分:0)

Mofi在评论中提供的答案正是我所要的,谢谢! 常见的分隔符是空格,因此代码可以很好地工作。

for /F "eol=| delims=" %%A in ('dir "* *.txt" /A-D-H /B 2^>nul') do for /F "eol=| tokens=1*" %%B in ("%%A") do ren "%%A" "%%C"