在批处理循环中从另一个字符串的中间重命名一个字符串?
Rename a string from the middle of another string in a batch loop?
我想在循环中从可变字符串 %%f
的中间删除一个已知字符串 .doc
。
我有一个将 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 and this (as well as many other questions) but I didn't see a solution that works in a loop. I found a Linux solution 了,但这对我没有直接帮助。
for
可替换参数可以包含分隔符列表,以便在 file/folder 引用的情况下仅提取部分内容(参见 for /?
)
在您的情况下,%%~dpnf.pdf
将 return 输入文件的驱动器、路径和名称,并附有字符串 .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
是对具有完整路径的文件的引用
...Q:\OfficeToPDF.exe "%%f" "%%~nf.pdf"
应该可以解决您的问题。
~n
选择文件名的 name
部分。请参阅文档提示中的 for /?
...
我想在循环中从可变字符串 %%f
的中间删除一个已知字符串 .doc
。
我有一个将 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 and this (as well as many other questions) but I didn't see a solution that works in a loop. I found a Linux solution 了,但这对我没有直接帮助。
for
可替换参数可以包含分隔符列表,以便在 file/folder 引用的情况下仅提取部分内容(参见 for /?
)
在您的情况下,%%~dpnf.pdf
将 return 输入文件的驱动器、路径和名称,并附有字符串 .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
是对具有完整路径的文件的引用
...Q:\OfficeToPDF.exe "%%f" "%%~nf.pdf"
应该可以解决您的问题。
~n
选择文件名的 name
部分。请参阅文档提示中的 for /?
...