更改windows批处理中文件的扩展名
我正在尝试重命名许多文件。我只想将扩展名从“.pdf.OCR.pdf”更改为“.pdf” 到目前为止,我得到了以下代码更改windows批处理中文件的扩展名,windows,file,batch-file,rename,Windows,File,Batch File,Rename,我正在尝试重命名许多文件。我只想将扩展名从“.pdf.OCR.pdf”更改为“.pdf” 到目前为止,我得到了以下代码 rem for /r myPDFfolder %%i in (*.pdf.OCR.pdf) do ren "%%i" "%%~ni.pdf" 但它似乎不适用于具有多个点的扩展名--我做错了什么?扩展名是文件名中最后一个点之后的部分 使用管柱更换来剥离不需要的零件: setlocal enableDelayedExpansion for /f "eol=* delims=" %
rem for /r myPDFfolder %%i in (*.pdf.OCR.pdf) do ren "%%i" "%%~ni.pdf"
但它似乎不适用于具有多个点的扩展名--我做错了什么?扩展名是文件名中最后一个点之后的部分 使用管柱更换来剥离不需要的零件:
setlocal enableDelayedExpansion
for /f "eol=* delims=" %%i in ('dir /s /b "r:\*.pdf.OCR.pdf"') do (
set "name=%%~nxi"
ren "%%i" "!name:.pdf.OCR=!"
)
p.S.
dir
的解析用于使代码更加健壮,以防不同的文本被剥离,这可能会改变排序顺序,并导致对文件进行两次或多次处理。扩展名是文件名最后一个点之后的部分
使用管柱更换来剥离不需要的零件:
setlocal enableDelayedExpansion
for /f "eol=* delims=" %%i in ('dir /s /b "r:\*.pdf.OCR.pdf"') do (
set "name=%%~nxi"
ren "%%i" "!name:.pdf.OCR=!"
)
p.S.
dir
解析用于使代码更加健壮,以防不同的文本被剥离,这可能会改变排序顺序,并导致for
处理文件两次或多次。替代解决方案,无需(删除ECHO
以实际重命名任何文件):
注意:目录树是在
for
遍历目录树之前枚举的,因为否则,某些项目可能会被跳过或尝试重命名两次(请参阅有关该问题的内容)。替代解决方案,无需(删除ECHO
以实际重命名任何文件):
注意:目录树是在
for
遍历目录树之前枚举的,因为否则,某些项目可能会被跳过或尝试重命名两次(请参阅有关该问题的内容)。不需要批处理文件。从命令提示符发出一个中等长度的一行代码就可以做到这一点
如果您知道所有匹配*.pdf.ocr.pdf
的文件都有这样的大小写:.pdf.ocr.pdf
,那么您可以从命令行使用以下命令:
for /r "myPDFfolder" %F in (.) do @ren "%F\*.pdf.ocr.pdf" *O&ren "%F\*.pdf.o" *f
for /r "myPDFfolder" %F in (*.pdf.ocr.pdf) do @for %G in ("%~nF") do @ren "%F" "%~nG"
第一个重命名删除尾部的.pdf
,第二个重命名删除.OCR
。上述操作之所以有效,是因为目标掩码中的*O
通过最后一次出现的大写O
保留了原始文件名中的所有内容,而*f
通过最后一次出现的小写f
保留了原始文件名中的所有内容。请注意,源掩码中的字符不区分大小写。您可以在网站上阅读更多有关此功能的信息
如果.pdf.ocr.pdf
的情况可能有所不同,那么上述操作将失败。但命令行中仍然有一个行程序:
for /r "myPDFfolder" %F in (.) do @ren "%F\*.pdf.ocr.pdf" *O&ren "%F\*.pdf.o" *f
for /r "myPDFfolder" %F in (*.pdf.ocr.pdf) do @for %G in ("%~nF") do @ren "%F" "%~nG"
%~nF
关闭最后一个.pdf
,和%~nG
关闭.OCR
,这将保留所需的.pdf
扩展名
您不必担心文件被重命名两次,因为重命名后的结果将不匹配*.pdf.ocr.pdf
,除非原始文件看起来像*.pdf.ocr.pdf.ocr.pdf
如果您认为将来可能需要频繁重命名具有复杂模式的文件,那么您应该研究-正则表达式重命名实用程序。它是纯脚本(混合JScript/批处理),从XP开始在任何Windows机器上本机运行。脚本中嵌入了完整的文档
假设JREPL.BAT位于路径中列出的文件夹中,则以下简单命令将从命令行起作用,仅重命名与搜索字符串中的大小写匹配的文件:
jren "(\.pdf)\.OCR\.pdf$" $1 /s /p "myPDFfolder"
如果要在匹配时忽略大小写,但要强制扩展名为小写,则:
jren "\.pdf\.ocr\.pdf$" ".pdf" /i /s /p "myPDFfolder"
不需要批处理文件。从命令提示符发出一个中等长度的一行代码就可以做到这一点 如果您知道所有匹配
*.pdf.ocr.pdf
的文件都有这样的大小写:.pdf.ocr.pdf
,那么您可以从命令行使用以下命令:
for /r "myPDFfolder" %F in (.) do @ren "%F\*.pdf.ocr.pdf" *O&ren "%F\*.pdf.o" *f
for /r "myPDFfolder" %F in (*.pdf.ocr.pdf) do @for %G in ("%~nF") do @ren "%F" "%~nG"
第一个重命名删除尾部的.pdf
,第二个重命名删除.OCR
。上述操作之所以有效,是因为目标掩码中的*O
通过最后一次出现的大写O
保留了原始文件名中的所有内容,而*f
通过最后一次出现的小写f
保留了原始文件名中的所有内容。请注意,源掩码中的字符不区分大小写。您可以在网站上阅读更多有关此功能的信息
如果.pdf.ocr.pdf
的情况可能有所不同,那么上述操作将失败。但命令行中仍然有一个行程序:
for /r "myPDFfolder" %F in (.) do @ren "%F\*.pdf.ocr.pdf" *O&ren "%F\*.pdf.o" *f
for /r "myPDFfolder" %F in (*.pdf.ocr.pdf) do @for %G in ("%~nF") do @ren "%F" "%~nG"
%~nF
关闭最后一个.pdf
,和%~nG
关闭.OCR
,这将保留所需的.pdf
扩展名
您不必担心文件被重命名两次,因为重命名后的结果将不匹配*.pdf.ocr.pdf
,除非原始文件看起来像*.pdf.ocr.pdf.ocr.pdf
如果您认为将来可能需要频繁重命名具有复杂模式的文件,那么您应该研究-正则表达式重命名实用程序。它是纯脚本(混合JScript/批处理),从XP开始在任何Windows机器上本机运行。脚本中嵌入了完整的文档
假设JREPL.BAT位于路径中列出的文件夹中,则以下简单命令将从命令行起作用,仅重命名与搜索字符串中的大小写匹配的文件:
jren "(\.pdf)\.OCR\.pdf$" $1 /s /p "myPDFfolder"
如果要在匹配时忽略大小写,但要强制扩展名为小写,则:
jren "\.pdf\.ocr\.pdf$" ".pdf" /i /s /p "myPDFfolder"
我会使用替换
!文件:.pdf.OCR.pdf=.pdf代码>完全符合原始问题…这将是一个过于字面的解释。目标是剥离不需要的部分。实际上,可能会使用一个更短的方法:set name=%%~ni
和ren“%%i”!name:.OCR=!”
,因此代码已经多余,更明显了……好吧,我同意。。。无论如何,您应该在整个集合
表达式周围放置“
,以避免使用特殊字符的麻烦