gpt4 book ai didi

batch-file - 如何使用 cmd 命令获取目录中的文件名列表并将其存储在变量中

转载 作者:行者123 更新时间:2023-12-03 20:04:26 30 4
gpt4 key购买 nike

我需要获取目录中的所有文件名,并将它们存储在命令行中的某个变量中。

我遇到了这个

`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 输出的每一行添加行号前缀。我使用行号作为数组的索引。
@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!

关于batch-file - 如何使用 cmd 命令获取目录中的文件名列表并将其存储在变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19540089/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com