我需要获取目录中的所有文件名,并将其存储在命令行中的某个变量中。
我遇到了这个
`dir /s /b > print.txt`
但这会将文件名打印为txt文件。
如何将这些名称存储在变量中?
我假设您的意思是Windows批处理文件,而不是DOS。
批处理环境变量限制为8191个字符,因此可能无法将所有文件路径放入一个变量中,具体取决于文件数和平均文件路径长度。
如果文件名包含空格,则应加引号。
假设它们适合一个变量,则可以使用:
@echo off
setlocal disableDelayedExpansion
set "files="
for /r %%F in (*) do call set files=%%files%% "%%F"
CALL语句相当慢。使用延迟扩展的速度更快,但是如果启用了延迟扩展,则的扩展%%F
会破坏包含的所有值!
。通过更多的工作,您可以拥有快速,安全的延迟扩展版本。
@echo off
setlocal disableDelayedExpansion
set "files=."
for /r %%F in (*) do (
setlocal enableDelayedExpansion
for /f "delims=" %%A in ("!files!") do (
endlocal
set "files=%%A "%%F"
)
)
(set files=%files:~2%)
如果文件名不适合一个变量,则应采用伪值数组,每个文件一个。在下面的脚本中,我使用FINDSTR为DIR ouptut的每一行添加行号前缀。我使用行号作为数组的索引。
@echo off
setlocal disableDelayedExpansion
:: Load the file path "array"
for /f "tokens=1* delims=:" %%A in ('dir /s /b^|findstr /n "^"') do (
set "file.%%A=%%B"
set "file.count=%%A"
)
:: Access the values
setlocal enableDelayedExpansion
for /l %%N in (1 1 %file.count%) do echo !file.%%N!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句