在批处理循环中从另一个字符串的中间重命名字符串?

时间:2015-02-24 11:42:28

标签: batch-file batch-rename

我想从循环中变量字符串.doc的中间删除已知字符串%%f。 我有一个将Word文件转换为PDF的批处理文件:

echo  Converting MS Word documents to PDF . . .
cd /D "%mypath%\documents"
for /f "delims=|" %%f in ('dir *.doc /S /B') do ( Q:\OfficeToPDF.exe "%%f" "%%f.pdf" )

问题:输出文件名为myfile.doc.pdf,我事先并不知道myfile的长度。

- >如何从该字符串中删除.doc
或者,替换 .doc..将实现相同的目标。 我想我需要this kind of string substitution,但我无法在for循环中使用它。 它几乎就是这样,但它不起作用:

for [...] do ( set outname=%%f:.doc.=.% && Q:\OfficeToPDF.exe "%%f" "%outname%" )

我已经看过thisthis(以及许多其他问题),但我没有看到一个循环中有效的解决方案。我找到了Linux solution,但这并没有直接帮助我。

2 个答案:

答案 0 :(得分:1)

for可替换参数可以包含分隔符列表,以便在文件/文件夹引用的情况下仅提取部分内容(请参阅for /?

在您的情况下,%%~dpnf.pdf将返回输入文件的驱动器,路径和名称,并附加字符串.pdf

for /f "delims=" %%f in ('dir *.doc /S /B') do ( Q:\OfficeToPDF.exe "%%f" "%%~dpnf.pdf" )

或者更好

for /r %%f in (*.doc) do ( Q:\OfficeToPDF.exe "%%~ff" "%%~dpnf.pdf" )

其中%%~ff是对具有完整路径的文件的引用

答案 1 :(得分:1)

...Q:\OfficeToPDF.exe "%%f" "%%~nf.pdf"

应该解决你的问题。

~n选择文件名的name部分。请参阅文档提示中的for /? ...