如何批量删除存储在字符串%variable%中的文件扩展名?

3

我有一个名为abcd.txt的文件,我想使用字符串变量将文件重命名为abcd_copy.txt。我尝试了ren命令,但它只给我abcd.txt_copy.txt。
我的方法是在%variable%中删除.txt,然后使用ren abcd.txt %varialbe%"_copy.txt"来重命名文件。以下是有问题的代码:

set variable=abcd.txt
ren *.txt %variable%"_copy.txt"

有什么建议吗? 谢谢您的帮助^^
3个回答

2

我建议使用带参数替换的FOR循环。如果您有一个文件夹中有多个文件,那么FOR循环也是非常好用的。

您需要使用%~n和%~x的组合。%~n将返回不带扩展名的文件名,而%~x将返回扩展名。

示例:

for %i in (*.txt) do echo Filename: %~ni Extension: %~xi

您的需求似乎是:

set variable=abcd.txt
for %i in (%variable%) do ren %i %~ni_copy%~xi 

直接执行

ren abcd.txt abcd_copy.txt

请记住,当在批处理脚本中使用时,需要使用双%%。

从CMD提示符尝试:"help for"并向下翻页。您将看到许多选项

有关更多详细信息(包括其他args),请参见此链接... http://ss64.com/nt/syntax-args.html

您还可以在这里找到一些有用的内容-它讨论了字符串替换。 http://ss64.com/nt/syntax-replace.html


你的答案也很棒,非常感谢提供详细的教程和建议,帮助我更好地学习批处理脚本编程。 - undefined

1
如果您确定扩展名是最后4个字符(包括点),则可以执行以下操作:
%variable:~0,-4%

-4表示将截掉最后4位数字。 所以在你的情况下,它将是:

ren *.txt "%variable:~0,-4%_copy.txt"

简单直接地解决了所提出的具体问题。唯一的风险(正如指出的那样)是它假设文件扩展名的长度。然而,如果文件是 .html 格式,它将无法工作。我建议使用内置变量编辑 %n 和 %x 来获取文件名和扩展名。 - undefined

0

未经测试:

set variable=abcd.txt
for %%# in ("%variable%") do ren "%%~#" "%%~n#_copy%%~x#"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接