Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用MS-DOS查找Unix函数_Batch File_Find_System_Dos - Fatal编程技术网

Batch file 使用MS-DOS查找Unix函数

Batch file 使用MS-DOS查找Unix函数,batch-file,find,system,dos,Batch File,Find,System,Dos,如何使用windows(MS-DOS命令)生成相同的结果: 列表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/NB

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

列表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

Windows文件名不区分大小写,因此简化了一些事情。但是
cmd.exe
(批处理)没有非常复杂的目录列表功能。您可能会更好地使用PowerShell之类的工具,但我对脚本语言不是很熟悉

或者更好的办法是,按照恩多在评论中的建议使用免费实用程序

但如果您想将自己限制为本机
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
  )
)
forfiles /s /m *.z3d /c "cmd /v:on /c set sz=000000000000000@fsize&if !sz:~-15! geq 000000000512000 echo @relpath" >list_Z3D.txt
要在命令行或批处理文件中准确获取>=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
  )
)
forfiles /s /m *.z3d /c "cmd /v:on /c set sz=000000000000000@fsize&if !sz:~-15! geq 000000000512000 echo @relpath" >list_Z3D.txt

用英语解释一下。Unix find语法没有帮助,看起来您提供了一个输出文件而没有输入文件。感谢这些非常准确的ASWER。我想知道为什么会有这么多的00000?@user1245845-零的数量是可调的。我选择了15位数字,以使文件极不可能超过限制。考虑到数十亿字节的文件相当普遍,我认为10是不够的。12可能就足够了。forfiles/s/m*.z3d/c“cmd/v:on/c set sz=000000000000000@fsize&如果!sz:~-15!geq 000000000 512000 echo@relpath“>listz3d.txt在XP上不起作用。我觉得格式不同?@user1245845-不幸的是,FORFILES在XP上不可用