Variables .bat文件-输出名称存储为变量的变量的值
好的,作为循环的一部分,我正在读取未知数量的文件名,并将它们保存到变量中,这些变量的名称取决于文件夹中文件的数量。像这样:Variables .bat文件-输出名称存储为变量的变量的值,variables,loops,batch-file,echo,Variables,Loops,Batch File,Echo,好的,作为循环的一部分,我正在读取未知数量的文件名,并将它们保存到变量中,这些变量的名称取决于文件夹中文件的数量。像这样: 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
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
File1
我遇到的问题是在后面的循环中读取变量的内容,因为以下代码:
SET fileName=File%count%
ECHO %fileName%> temp.txt
输出
firstfile.txt
secondfile.txt
File1
当我希望它以该名称输出存储在变量中的值时。
期望输出:
firstfile.txt
有什么方法可以做到这一点吗?我相信这段代码可以帮助您:
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、 您只需%即可实现您的要求,如:
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
试试这个:
call echo %%fileName%% > temp.txt
如果文件名包含
,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%%
)
调用解决方案看起来更简单,但速度要慢得多,如果扩展变量包含一个特殊字符,如&
+1,则调用可能会失败。可能应该在DIR命令中添加/a-d选项,以将输出限制为文件并消除文件夹。此外,如果文件名包含,则此操作将失败代码>字符。用于!字符您可以使用类似集合var=%var:!=^!%的变通方法在这种情况下,有很多原因说明这一点没有帮助:该值还不在环境变量中;要实现这一目标,您必须扩展%%a,现在您又回到了起点。也不能在定义它的同一代码块中使用%var%,因此首先需要延迟扩展。