windows 查找具有特定扩展名的所有文件沿着版本

nbnkbykc  于 2023-06-24  发布在  Windows
关注(0)|答案(1)|浏览(165)

我试图获取具有特定扩展名的文件列表及其版本,并将其存储在文本文件中。但是,我无法得到所需的输出。文本文件将显示文件夹中的所有文件列表。

@echo off
for %%f in (*.drw) do (
    if "%%~xf"==".drw" echo %%f
)
dir /b > files.txt
echo. & echo.

我试图提取所有文件的列表,这将有扩展名的形式:

test.drw.1
flange.drw.1
block.drw.2
hinge.drw.3
door.drw.1

文本文件将显示文件的所有列表(.pdf、.pro、.dwg、.asm)。我是不是漏掉了什么?或者这是因为程序试图严格扫描.drw扩展名,并将.1和.2视为扩展名并跳过它们?任何帮助都很感激。
此外,我将不胜感激,如果我们能够回显的文件具有最高版本的扩展名。例如

flange.drw.1
flange.drw.12

它应该在txt文件中回显flange.drw.12,忽略带有.drw.1的文件

w3nuxt5m

w3nuxt5m1#

嗯...首先,让我们试着遵循一个特定的术语...
文件名的 * 扩展名 * 是名称的 * 最后一部分 *,用一个点分隔。在上面的示例文件中,所有文件都有 digits 作为扩展名...
如果你想列出以.drw.<anything>结尾的文件,那么这就足够了:

dir /B *.drw.*

如果你想要文件具有相同的 name 部分和最高的扩展名,那么这应该可以做到:

@echo off
setlocal EnableDelayedExpansion

for %%a in (*.drw.*) do (
   if not defined file[%%~Na] (
      set "file[%%~Na]=%%~Xa"
   ) else (
      set "ext=%%~Xa"
      if !ext:~1! gtr !file[%%~Na]:~1! set "file[%%~Na]=%%~Xa"
   )
)

echo Files with last "versions" (extensions really):
for /F "tokens=2,3 delims=[]=" %%a in ('set file[') do echo %%a%%b

例如,对于以下输入文件:

test.drw.1
flange.drw.1
block.drw.2
hinge.drw.3
door.drw.1
test.drw.3
flange.drw.4
block.drw.5
hinge.drw.2
door.drw.2
flange.drw.12

...这是输出:

Files with last "versions" (extensions really):
block.drw.5
door.drw.2
flange.drw.12
hinge.drw.3
test.drw.3

相关问题