0

好的,作为循环的一部分,我正在读取未知数量的文件名,并将它们保存到名称取决于文件夹中文件数量的变量中。像这样:

SET /a count=1

DIR %rootFolder%> "fileList.txt" /b

FOR /f "tokens=* delims= usebackq" %%a IN ("fileList.txt") DO CALL :LOOP %%a
goto :LOOP2
:Loop
SET var=%1
SET File%count%=%var%
SET /a count=%count%+1
GOTO:EOF

这很好用

ECHO File1
ECHO File2

输出

firstfile.txt
secondfile.txt

我遇到的问题是在稍后的循环中读出变量的内容,因为这段代码:

SET fileName=File%count%
ECHO %fileName%> temp.txt

输出

File1

当我希望它输出按该名称存储在变量中的值时。期望的输出:

firstfile.txt

有没有办法做到这一点?

4

3 回答 3

1

我相信这段代码可以帮助你:

setlocal enabledelayedexpansion
set /a count=0
for /f "delims=" %%a in ('dir /b %rootFolder%') do (
    set /a count+=1
    set File!count!=%%a
)

for /l %%a in (1,1,%count%) do (
    echo !File%%a!
)

如果你不喜欢使用 !'s 的快捷方式,你可以只用 %'s 来实现你所要求的:

set /a count=0
for /f "delims=" %%a in ('dir /b %rootFolder%') do call :loop %%a
call set var=%%File%count%%%
echo %var%

goto :eof

:loop
set /a count+=1
set File%count%=%1
goto :eof
于 2012-05-22T18:20:19.667 回答
0

如果文件名包含,panda-34 解决方案将失败,!因为延迟扩展会破坏 %%a 的扩展。!通过在循环中打开和关闭延迟扩展,可以改进该解决方案以支持文件名。

setlocal disableDelayedExpansion
set /a count=0
for /f "delims=" %%a in ('dir /a-d /b %rootFolder%') do (
  set /a count+=1
  setlocal enableDelayedExpansion
  for /f %%b in ("!count!") do (
    endlocal
    set "file%%b=%%a"
  )
)

setlocal enableDelayedExpansion
for /l %%a in (1,1,%count%) do (
  echo !File%%a!
)

在我看来,延迟扩展解决方案是迄今为止最好的方法。但还有另一种选择。

setlocal disableDelayedExpansion
set /a count=0
for /f "delims=" %%a in ('dir /a-d /b %rootFolder%') do (
  set /a count+=1
  call set "file%%count%%=%%a"
)

for /l %%a in (1,1,%count%) do (
  call echo %%File%%a%%
)

调用解决方案看起来更简单,但速度要慢得多,如果扩展变量包含特殊字符(如&.

于 2012-05-22T18:50:24.837 回答
0

尝试这个:

call echo %%fileName%% > temp.txt
于 2012-05-22T18:31:38.757 回答