我想从循环中变量字符串.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%" )
我已经看过this和this(以及许多其他问题),但我没有看到一个循环中有效的解决方案。我找到了Linux solution,但这并没有直接帮助我。
答案 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 /?
...