我有一个程序生成未知数量的具有整数扩展名的文件,如下所示。
我想附加.eps
到每个。如何在 DOS 批处理文件中执行此操作?
我不能使用以下内容,因为我不知道搜索表达式。
for %%x in (Main.<what>) do rename "%%x" "%%x.eps"
注意:任何具有相同名称且具有非整数扩展名的文件都必须保持原样。
我有一个程序生成未知数量的具有整数扩展名的文件,如下所示。
我想附加.eps
到每个。如何在 DOS 批处理文件中执行此操作?
我不能使用以下内容,因为我不知道搜索表达式。
for %%x in (Main.<what>) do rename "%%x" "%%x.eps"
注意:任何具有相同名称且具有非整数扩展名的文件都必须保持原样。
setlocal EnableDelayedExpansion
for %%x in (Main.*) do (
set ext=%%~Xx
set /a num=!ext:~1!
if !num! gtr 0 rename "%%x" "%%x.eps"
)
首先 SET 只获取文件名的扩展名,包括点(带 ~X)。第二个 SET /A 尝试将扩展名(不带 :~1 的点)转换为数字。如果它确实是一个数字(大于零),请重命名。
这应该遍历目录。以下是它如何工作的解释:
tokens = 1-2意味着我们只关心文件名的第一部分和第二部分。
delims =.
表示分割.
文件名中的标记。
dir /b
表示仅列出文件,不显示命令中通常显示的任何.
或。您需要将目录放在那里或从同一个文件目录运行。..
dir
LSS
achar
将始终返回GREATER THAN,这就是它的工作原理。我选了9999,你随便选。
最后,它获取文件名的第一部分 ( %%A
),然后是扩展名 ( %%B
),然后重命名为文件名的第一部分 ( %%A
) 并带有eps
扩展名。
for /f "tokens=1-2 delims=." %%A in ('dir /b') do if %%B LSS 9999 rename %%A.%%B %%A.%%B.eps
把它放在你的批处理文件中并运行它。
注意:您不能重命名为相同的文件名,所以我使用%%A.%%B.eps
.