我正在寻找一个批处理文件,该文件将从文件夹中的文件中删除特定的前缀。
例如将“ 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”
答案 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"