我需要遍历一个文件夹并收集所有文档并将它们存储到一个变量中。我坚持到底如何做这个过程。(必须作为批处理文件完成)
目前我在这里:
@echo 关闭 REM bat文件将文档导入客户端 REM 设置文件位置 设置位置="" FOR %%i IN (*) DO ECHO %%i
对于 set loc,我是否将其用作文件夹路径的变量?而for循环是(*)变量(loc)?
我需要遍历一个文件夹并收集所有文档并将它们存储到一个变量中。我坚持到底如何做这个过程。(必须作为批处理文件完成)
目前我在这里:
@echo 关闭 REM bat文件将文档导入客户端 REM 设置文件位置 设置位置="" FOR %%i IN (*) DO ECHO %%i
对于 set loc,我是否将其用作文件夹路径的变量?而for循环是(*)变量(loc)?
一般来说,您的要求是不切实际的,因为一个变量最多可以容纳 8191 个字符。不需要那么多文件就可以超过一个变量的容量。
但是如果你知道文件的数量比较少,而且文件名的长度不是特别大,那么下面的大部分时间都会起作用。
@echo off
setlocal enableDelayedExpansion
set "loc=,"
for %%F in (*) do (set loc=!loc!"%%F",)
set "loc=!loc:~1,-1!"
echo !loc!
在文件名包含的极少数情况下,上述方法会失败,!
因为延迟扩展会破坏%%F
它何时包含的值!
。
解决方法是从延迟扩展关闭开始,然后在循环中打开和关闭它。额外的 FOR /F 循环用于!loc!
跨 ENDLOCAL 屏障传输值。
@echo off
setlocal disableDelayedExpansion
set "loc=,"
for %%F in (*) do (
setlocal enableDelayedExpansion
for /f "delims=" %%L in ("!loc!") do (
endlocal
(set loc=%%L"%%F",)
)
)
(set loc=%loc:~1,-1%)
echo %loc%