如何将文件名保存到Windows批处理文件中的变量中?

时间:2016-12-05 16:21:40

标签: windows batch-file variables for-loop

我正在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 ...

有没有办法捕获整个文件名而不只是第一个单词?

1 个答案:

答案 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完成排序,则会列出最新的,因此会先分配。

第二种形式的优点是速度快得多,特别是如果目录包含大量文件。