我正在尝试列出扩展后有额外后缀的所有文件 例如:.txt.1或.txt.2等..
我正在使用 txt。,但是它提供了所有文件名,而不仅仅是带有额外后缀的文件
for %%A in (*txt.*) do (call :renum "%%A")
在此之后,我正在编写程序来相应地重命名文件。 有人可以检查和帮助。
答案 0 :(得分:2)
一种解决方案是在循环内按扩展名过滤:
FOR %%A IN (*txt.*) DO (
IF NOT "%%~xA"==".txt" CALL :renum "%%A"
)
这可以通过使用FOR
变量引用"的增强替换来实现,在这种情况下为%%~xA
。您可以通过执行FOR /?
来了解所有可用的替换。
更新:
IF /I
代替普通IF
。name.txt.txt
不会处理。如果没有明确说明,那很可能。name_txt.ext
将处理,这是由于给定的通配符*txt.*
所致,可以通过使用*.txt.*
来避免。我首先不改变它的理由是,只有OP知道他的实际文件集,并且我认为他有理由选择它(在这些类型的问题中常见的情况)。答案 1 :(得分:1)
您可以使用两个嵌套的for
循环:
rem // Corrected file pattern (added a `.`):
for %%A in ("*.txt.*") do (
rem // Check (last) file extension:
if /I not "%%~xA"==".txt" (
rem // Remove (last) file extension:
for %%B in ("%%~nA") do (
rem // Check next-to-last file ext.:
if /I "%%~xB"==".txt" (
call :renum "%%~A"
)
)
)
)
根据for
(在命令提示符窗口中键入for /?
)的帮助,~x
变量的for
修饰符检索文件扩展名(即最后一个点.
以及之后的所有内容)。 ~n
修饰符检索除文件扩展名以外的所有内容,因此检索文件(基本)名称。上面的代码使用两个嵌套的for
循环来获取最后一个和倒数第二个文件扩展名,并针对.txt
进行检查(以不区分大小写的方式)。
请注意,对于以call
结尾的文件,不会执行.txt.txt
命令行。
答案 2 :(得分:1)
我会使用FINDSTR与DIR / B和FOR / F
以下内容将处理包含name.txt.ext
和name.txt.ext.ext
等任意数量额外扩展名的名称。这包括name.txt.txt
等名称
for /f "delims= eol=:" %%F in (
'dir /b /a-d *.txt.*^|findstr /i "\.txt\."'
) do call :renum "%%F"
此变体只会使用name.txt.ext
之类的额外扩展名处理名称(包括name.txt.txt
)
for /f "delims= eol=:" %%F in (
'dir /b /a-d *.txt.*^|findstr /i "\.txt\.[^.]*$"'
) do call :renum "%%F"
您也可以查看我的JREN.BAT regular expression file renaming utility。它可以一步过滤和重命名所有文件,而无需任何自定义批处理脚本。
例如,以下内容只会重命名看起来像“name.txt.ext”的文件,并将它们转换为“name_ext.txt”
jren "(\.txt)\.([^.]+)$" "_$2$1" /i