0

我需要遍历一个文件夹并收集所有文档并将它们存储到一个变量中。我坚持到底如何做这个过程。(必须作为批处理文件完成)

目前我在这里:

@echo 关闭
REM bat文件将文档导入客户端
REM 设置文件位置
设置位置=""
FOR %%i IN (*) DO ECHO %%i

对于 set loc,我是否将其用作文件夹路径的变量?而for循环是(*)变量(loc)?

4

1 回答 1

1

一般来说,您的要求是不切实际的,因为一个变量最多可以容纳 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%
于 2013-06-14T21:53:02.490 回答