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 如何在文件大小最大的文件夹中获取*.docx文件的文件名?_Batch File - Fatal编程技术网

Batch file 如何在文件大小最大的文件夹中获取*.docx文件的文件名?

Batch file 如何在文件大小最大的文件夹中获取*.docx文件的文件名?,batch-file,Batch File,目录包含一个或多个Microsoft Word文档文件(*.docx)。我想获取最大文件大小的MS Word文件的文件名,并将其存储在变量中 例如: D:\file1.docx 257 KB D:\file2.docx 850 KB D:\file3.docx 122 KB 有三个*.docx文件file2.docx的最大文件大小为850 KB,其中的名称应分配给环境变量 对于上面的示例,完成此任务需要哪个批处理文件代码?尝试此批处理文件: @echo of

目录包含一个或多个Microsoft Word文档文件(*.docx)。我想获取最大文件大小的MS Word文件的文件名,并将其存储在变量中

例如:

D:\file1.docx       257 KB
D:\file2.docx       850 KB
D:\file3.docx       122 KB
有三个*.docx文件
file2.docx
的最大文件大小为850 KB,其中的名称应分配给环境变量

对于上面的示例,完成此任务需要哪个批处理文件代码?

尝试此批处理文件:

@echo off
pushd "D:\"

for /F "eol=| delims=" %%I in ('dir *.docx /A-D /B /O-S 2^>nul') do (
    if "%CD:~-1%" == "\" ( set "FileName=%CD%%%I" ) else set "FileName=%CD%\%%I"
    set "FileSize=%%~zI"
    goto OutputData
)

echo Could not find any *.docx in folder: "%CD%"
popd
goto :EOF

:OutputData
echo "%FileName%" is largest *.docx with file size: %FileSize%
popd
批处理文件首先设置
D:\
具有当前目录,并在堆栈上推送当前目录的路径

下一个FOR在一个单独的命令过程中执行,该命令过程从命令行后台的
cmd.exe/C
开始:

dir *.docx /A-D-H /B /O-S 2>nul
DIR在当前目录中搜索

  • 由于
    /A-D-H
    (属性非目录且不隐藏)而导致非隐藏文件
  • 匹配通配符模式
    *.docx
  • 并以裸格式输出文件名和扩展名,但由于
    /B
  • 由于
    /O-S
    ,按大小排列的所有找到的文件排序器都首先使用最大的文件
DIR在查找no*.docx文件时输出的错误消息通过
2>NUL
从句柄STDERR重定向到设备NUL,以抑制此错误消息。当Windows命令解释器在执行FOR的命令之前处理此命令行时,重定向操作符必须在上用插入符号^转义,以便命令行被解释为文字字符,该命令行以单独的方式执行嵌入的dir命令行命令进程在后台启动

FOR捕获DIR以在单独的命令过程中处理STDOUT的输出,并逐行处理

FOR忽略空行和以分号开头的行。通过使用选项
eol=|
可以从
修改行尾字符
指向一个垂直条,该垂直条不能位于文件名的开头,而文件名的第一个字符可以是分号

FOR使用普通空格和水平制表符作为字符串分隔符,将每个捕获的行拆分为子字符串。文件名可以包含一个或多个空格。通过使用选项
delims=
设置了一个空的分隔符列表,因此处理过的带有文件名的行根本不会被分割

%CD%
扩展到当前目录路径,除当前目录是驱动器的根目录外,路径不以反斜杠结尾。因此,在处理第一个捕获的行时,当前目录路径被连接起来,其中最大的*.docx文件的文件名被分配给循环变量
I
,而没有或带有附加的反斜杠,该反斜杠的文件名和Microsoft Word文件的文件扩展名首先由DIR输出

将完全限定的文件名分配给环境变量
FileName
并将此文件的文件大小分配给环境变量
FileSize
后,立即退出FOR循环,跳转到label
OutputData

在最终退出批处理文件的处理之前,从堆栈中弹出初始当前目录的路径,并再次设置为当前目录

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • dir/?
  • echo/?
  • 获取/?
  • goto/?
  • 如果/?
  • popd/?
  • pushd/?
  • 设置/?

您尝试了什么,您被困在哪里?请提供您的编码尝试的详细信息!考虑到这个网站不是一个免费的代码编写服务,也不是一个教程网站,它是一个编程相关问题的问答资源。请阅读并学习!