0

How could I generate the same result but using windows (MS-DOS command) :

'find ./ -type f \( -name "*.Z3D" -or -name "*.z3d" -or -name "*.Z3d" -or -name "*.z3D" \)     -size +1000 > list_Z3D.txt'

list_Z3D.txt :

.//data/BOX07_CH4/ZEN111.Z3D
.//data/BOX07_CH4/ZEN111_copy.Z3D
.//data/BOX07_CH5/ZEN065.Z3D
.//data/BOX07_CH5/ZEN065_copy.Z3D
.//data/ZEN111_bis1.Z3D
.//data/ZEN111_bis2.Z3D
.//data/ZEN111_bis3.Z3D
.//sch_1/NBL01_CH1/ZEUS3058.Z3D
.//sch_1/NBL01_CH2/ZEUS3064.Z3D
.//sch_1/NBL01_CH4/ZEUS3075.Z3D
.//sch_1/NBL01_CH5/ZEUS3083.Z3D
4

1 回答 1

1

Windows 文件名不区分大小写,因此简化了一些事情。但是cmd.exe(batch) 没有非常复杂的目录列表功能。使用 PowerShell 之类的东西可能会更好,但我不太了解这种脚本语言。

或者更好的是,根据 Endoro 在评论中的建议,使用免费的gnu find for Windows实用程序。

但是,如果您想将自己限制为本地cmd.exe(批处理)命令,那么以下是一些选项:

以下命令将在命令行上运行。它会给出绝对路径,但它不适用于大小超过 ~2 GB 的文件,因为cmd.exe数字仅限于有符号的 32 位整数。大于最大值的数字将使用字符串语义而不是数字进行比较,从而给出错误的结果。文件大小总是以字节为单位,所以我相应地调整了大小:

(for /r %F in (*.z3d) do @if %~zF geq 512000 echo %F) >list_Z3D.txt

百分比必须加倍才能在批处理文件中使用

@echo off
(for /r %%F in (*.z3d) do if %%~zF geq 512000 echo %%F) >list_Z3D.txt

相对路径可以用 FORFILES 得到,但是比较慢。此命令将在命令行和批处理文件中工作。它也不适用于超过 ~2 GB 的文件。

forfiles /s /m *.z3d /c "cmd /c if @fsize geq 512000 echo @relpath" >list_Z3D.txt

WMIC 可以准确地按文件大小筛选,无论大小。但是在使用目录树时它很慢。这提供了绝对路径。

@echo off
setlocal disableDelayedExpansion
set "ext=z3d"
set "sz=512000"
for %%F in ("%cd%") do (
  set "drv=%%~dF"
  set "pth=%%~pnxF\%%"
)
wmic datafile where "drive='%drv%' and path like '%pth:\=\\%' and filesize>%sz% and extension='%ext%'" get name |more +1 >list_Z3D.txt

前两个解决方案中的任何一个都可以通过额外的编程来处理大文件。以下支持文件大小高达 ~999 TB。这些解决方案将比 WMIC 解决方案更快。

要使用批处理文件准确获取 >= 512000 的文件的绝对路径:

@echo off
setlocal disableDelayedExpansion
>list_Z3D.txt (
  for /r %%F in (*.z3d) do (
    set "sz=000000000000000%%~zF"
    set "file=%%F"
    setlocal enableDelayedExpansion
    if !sz:~-15! geq 000000000512000 echo !file!
    endlocal
  )
)

要在命令行或批处理文件中准确获取 >= 512000 的文件的相对路径:

forfiles /s /m *.z3d /c "cmd /v:on /c set sz=000000000000000@fsize&if !sz:~-15! geq 000000000512000 echo @relpath" >list_Z3D.txt
于 2013-09-22T14:34:46.183 回答