我正在Windows(7)中开发一个批处理文件,并且我正在尝试使用for循环来查找文件的最新版本并将文件名放入变量中。我正在使用以下代码:
FOR /F %%i IN ('DIR "Test*.xlsx" /B /-D') DO set file_name=%%i
循环有效,但问题是我的文件名中有空格,循环只是将文件名中的第一个单词复制到变量中。防爆。文件名是“Test 2016-12-01.xlsx”,变量i设置为“Test”而没有2016 ...
有没有办法捕获整个文件名而不只是第一个单词?
答案 0 :(得分:1)
FOR /F "delims=" %%i IN ('DIR "Test*.xlsx" /B /OD /A-D') DO set "file_name=%%i"
或
FOR /F "delims=" %%i IN ('DIR "Test*.xlsx" /B /O-D /A-D') DO set "file_name=%%i"&goto nextstep
:nextstep
"delims="
删除默认包含 Space 的分隔符 - 这就是名称在空格处终止的原因 - Space 是分隔符和{的默认值{1}}为tokens
,因此只分配了第一个标记,由默认的空格
1
切换dir
毫无意义;它的反应方式与/-d
相同,后者以列式形式布局目录列表,并被/d
覆盖。
/b
禁止列表中的目录名。
/a-d
以日期顺序显示目录列表,以反向日期顺序显示/od
。因此,第一个片段依次为变量分配每个文件名,在/o-d
块之后,变量包含分配的姓氏,该文件名是具有最新日期的文件名。
第二个块在分配第一个文件名时强行跳出for
循环,因此如果使用for
完成排序,则会列出最新的,因此会先分配。
第二种形式的优点是速度快得多,特别是如果目录包含大量文件。