Batch file 如何在文件大小最大的文件夹中获取*.docx文件的文件名?
目录包含一个或多个Microsoft Word文档文件(*.docx)。我想获取最大文件大小的MS Word文件的文件名,并将其存储在变量中 例如: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
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
2>NUL
从句柄STDERR重定向到设备NUL,以抑制此错误消息。当Windows命令解释器在执行FOR的命令之前处理此命令行时,重定向操作符必须在上用插入符号^转义,以便命令行被解释为文字字符,该命令行以单独的方式执行嵌入的dir命令行命令进程在后台启动
FOR捕获DIR以在单独的命令过程中处理STDOUT的输出,并逐行处理
FOR忽略空行和以分号开头的行。通过使用选项eol=|
可以从修改行尾字符
指向一个垂直条,该垂直条不能位于文件名的开头,而文件名的第一个字符可以是分号
FOR使用普通空格和水平制表符作为字符串分隔符,将每个捕获的行拆分为子字符串。文件名可以包含一个或多个空格。通过使用选项delims=
设置了一个空的分隔符列表,因此处理过的带有文件名的行根本不会被分割
%CD%
扩展到当前目录路径,除当前目录是驱动器的根目录外,路径不以反斜杠结尾。因此,在处理第一个捕获的行时,当前目录路径被连接起来,其中最大的*.docx文件的文件名被分配给循环变量I
,而没有或带有附加的反斜杠,该反斜杠的文件名和Microsoft Word文件的文件扩展名首先由DIR输出
将完全限定的文件名分配给环境变量FileName
并将此文件的文件大小分配给环境变量FileSize
后,立即退出FOR循环,跳转到labelOutputData
在最终退出批处理文件的处理之前,从堆栈中弹出初始当前目录的路径,并再次设置为当前目录
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
dir/?
echo/?
获取/?
goto/?
如果/?
popd/?
pushd/?
设置/?