好吧,作为循环的一部分,我正在读取未知数量的文件名,并将它们保存到名称取决于文件夹中文件数的变量中。像这样:
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
有没有办法做到这一点?
答案 0 :(得分: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!
)
如果你不喜欢!的快捷方式,你可以用%的方式实现你所要求的:
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
答案 1 :(得分:0)
试试这个:
call echo %%fileName%% > temp.txt
答案 2 :(得分: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%%
)
调用解决方案看起来更简单,但速度明显变慢,如果扩展变量包含&
这样的特殊字符,它可能会失败。