首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用MS-DOS查找Unix函数

用MS-DOS查找Unix函数
EN

Stack Overflow用户
提问于 2013-09-22 12:06:25
回答 1查看 423关注 0票数 0

如果使用windows (MS命令),如何生成相同的结果:

代码语言:javascript
复制
'find ./ -type f \( -name "*.Z3D" -or -name "*.z3d" -or -name "*.Z3d" -or -name "*.z3D" \)     -size +1000 > list_Z3D.txt'

list_Z3D.txt:

代码语言:javascript
复制
.//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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-22 14:34:46

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

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

但是,如果您希望将自己限制为本地cmd.exe (批处理)逗号,那么下面是一些选项:

下面的命令将在命令行上工作。它将给出绝对路径,但是它不能正确地处理大小超过2G的文件,因为cmd.exe数字仅限于带符号的32位整数。大于最大值的数字将使用字符串语义而不是数字进行比较,从而给出错误的结果。文件大小总是以字节为单位,因此我相应地调整了大小:

代码语言:javascript
复制
(for /r %F in (*.z3d) do @if %~zF geq 512000 echo %F) >list_Z3D.txt

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

代码语言:javascript
复制
@echo off
(for /r %%F in (*.z3d) do if %%~zF geq 512000 echo %%F) >list_Z3D.txt

利用FORFILES可以得到相对路径,但相对比较慢。此命令将在命令行和批处理文件中同时工作。对于超过2G的文件,它也不能正常工作。

代码语言:javascript
复制
forfiles /s /m *.z3d /c "cmd /c if @fsize geq 512000 echo @relpath" >list_Z3D.txt

无论大小大小,WMIC都可以根据文件大小准确地进行屏幕筛选。但是,在使用目录树时,它非常慢。这提供了绝对路径。

代码语言:javascript
复制
@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文件的绝对路径,可以使用批处理文件:

代码语言:javascript
复制
@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文件的相对路径:

代码语言:javascript
复制
forfiles /s /m *.z3d /c "cmd /v:on /c set sz=000000000000000@fsize&if !sz:~-15! geq 000000000512000 echo @relpath" >list_Z3D.txt
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18943650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档