我尝试使用FOR将子目录名称分配给变量,方法是使用批处理文件将CHDIR结果保存到临时文本文档
批处理文件输入:
CD / d路径名
DIR / b / d> temp.txt
FINDSTR / b / n字符串路径名\ temp.txt
ECHO在上面找到字符串结果
暂停
FOR / F"令牌= 1-3" %% A IN(' FINDSTR / b字符串路径名\ temp.txt')DO(
SET One = %% A
SET 2 = %% B
SET 3 = %% C
)
ECHO%One%
ECHO%2%
ECHO%3%
暂停
命令提示符输出:
目录1
directory2
目录3
找到上面的字符串结果
按任意键继续 。 。 。
目录3
回声已关闭。
回声已关闭。
按任意键继续 。 。 。
初始FINDSTR的结果应该与ECHO&#d; d变量匹配,如果它们被正确分配但只捕获了最后的子目录名称,并且未分配最后两个变量。
如何让每个子目录分配给一个单独的变量? 是否有更简单的方法来实现这一目标?
答案 0 :(得分:0)
tokens
子句用于分割每个输入行,而不是确定要读取的行数。
@echo off
setlocal enableextensions disabledelayedexpansion
rem Clean variables
for %%b in (one two three) do set "%%b="
rem Read folders
for /d %%a in ("c:\somewhere\*") do (
rem For each folder found, assign to a non assigned variable
set "done="
for %%b in (one two three) do if not defined done if not defined %%b (
set "%%b=%%a"
set "done=1"
)
)
echo %one%
echo %two%
echo %three%
答案 1 :(得分:0)
存储和处理未定义数量的项目的常用方法是通过数组,它是一个带有一个名称的变量,但有几个元素通过方括号中的数字索引或下标选择括号;例如:set array[1]=Element number 1
。
@echo off
setlocal EnableDelayedExpansion
rem Initialize the index
set index=0
rem Process all folders
cd /D pathname
for /D %%a in (string*) do (
rem Increment the index to next element
set /A index+=1
rem Store the folder in next array element
set "folder[!index!]=%%a"
)
rem Store the total number of folders
set number=%index%
rem Show the first folder
echo First folder: %folder[1]%
rem Show the last folder
echo Last folder: !folder[%number%]!
rem Show all folders
for /L %%i in (1,1,%number%) do echo %%i- !folder[%%i]!
此方法需要延迟扩展,因为索引的值在for
循环内发生变化。如果索引将以这种方式扩展:%index%
,它将在for
迭代之前扩展一次。如果变量以这种方式包含在百分比中:!index!
和延迟扩展已启用(通过开头的setlocal
命令),索引的值将每次扩展 行已执行。您可以在批处理文件here中阅读有关阵列管理的进一步说明。