更改windows批处理中文件的扩展名

更改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=" %

我正在尝试重命名许多文件。我只想将扩展名从“.pdf.OCR.pdf”更改为“.pdf” 到目前为止,我得到了以下代码

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=!”
,因此代码已经多余,更明显了……好吧,我同意。。。无论如何,您应该在整个
集合
表达式周围放置
,以避免使用特殊字符的麻烦