Batch file 批处理:查找具有特定内容的文件并扩展现有名称
我有大约100个.xml文件,但它的文件名不是自解释的。因此,我想寻找一个特定的单词,并用这个单词扩展相关文件。 多亏了其他一些有用的条目,我可以部分地了解如何做到这一点,但不知何故,这些文件没有重命名 有人知道我的代码出了什么问题吗?先谢谢你Batch file 批处理:查找具有特定内容的文件并扩展现有名称,batch-file,rename,findstr,Batch File,Rename,Findstr,我有大约100个.xml文件,但它的文件名不是自解释的。因此,我想寻找一个特定的单词,并用这个单词扩展相关文件。 多亏了其他一些有用的条目,我可以部分地了解如何做到这一点,但不知何故,这些文件没有重命名 有人知道我的代码出了什么问题吗?先谢谢你 chcp 1252 SET sourcedir=P:\path FOR /f "tokens=1 delims=." %%a IN ('findstr /c:"3256" "%sourcedir%\*.xml"') DO ( ECHO
chcp 1252
SET sourcedir=P:\path
FOR /f "tokens=1 delims=." %%a IN ('findstr /c:"3256" "%sourcedir%\*.xml"') DO (
ECHO (REN "%%a.xml" "%%a_3256.xml")
)
pause
chcp 1252
设置“sourcedir=P:\path”
对于/f“delims=“%%a IN('findstr/m/c:'3256”“%sourcedir%\*.xml”“)DO(
ECHO REN“%%a”“%%~na_3256%%~xa”
)
暂停
在代码中,对ren
命令的两个参数都使用%%a
,但第二个参数必须只包含名称和扩展名,而不包含路径。您可以使用%%~na
解决此问题,即%%a
引用的文件的文件名(无路径或扩展名)(%%~xa
是扩展名)
此外,如果在任何文件中多次找到该字符串,则代码将尝试重命名该文件两次(或更多)。最好使用findstr
中的/m
开关仅检索文件列表
重命名操作仅回显到控制台。如果输出正确,请删除
echo
命令。Dang it MC ND,就在我编写了一些弗兰肯斯坦脚本之后,提出了:
在这个伟大的网站上反复尝试之后,我终于想出了(归功于)
似乎
FINDSTR
命令将:
附加到结果中,这可能会导致问题。我一直在寻找在DOS中替换或删除字符串的方法,但到目前为止还没有找到任何有用的方法。谢谢你们(还有@user4317867)。我明白你们的意思,并尝试相应地更改我的代码。但是,在我的文件夹中找不到重命名的文件。既然它重命名了文件,这不应该在同一个文件夹中进行吗?我的新代码看起来完全像MC ND代码。chcp 1252设置sourcedir=P:[findstr/m/c:“3256”“%sourcedir%*.xml”“)中/f%%a的路径暂停(ECHO%%a ECHO REN“%%a”“%%~na_3256%%~xa”)今晚我必须再试一次。希望尽快找到解决方案/解释。@an_-ja,是我的错,我忘了在答案中加入最后一行。现在更新。删除作为ren
命令前缀的echo
命令。完美!它起作用了。非常感谢你。我正要开始处理批处理文件。这是一个很好的工具。
@ECHO OFF
set pathd=C:\SomePathHere
setlocal enabledelayedexpansion
for /f %%a in ('findstr /ic:SearchString %pathd%\*.xml') do (
set str=%%a
set str=!str:^:=!
echo !str!
)