如果使用windows (MS命令),如何生成相同的结果:
'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发布于 2013-09-22 14:34:46
Windows文件名不区分大小写,因此可以稍微简化一些事情。但是cmd.exe (批处理)没有非常复杂的目录列表功能。使用PowerShell这样的语言可能会更好,但我不太了解脚本语言。
或者更好的是,按照Endoro在评论中的建议使用免费的gnu find for Windows实用程序。
但是,如果您希望将自己限制为本地cmd.exe (批处理)逗号,那么下面是一些选项:
下面的命令将在命令行上工作。它将给出绝对路径,但是它不能正确地处理大小超过2G的文件,因为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可以得到相对路径,但相对比较慢。此命令将在命令行和批处理文件中同时工作。对于超过2G的文件,它也不能正常工作。
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 to。这些解决方案将比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.txthttps://stackoverflow.com/questions/18943650
复制相似问题