2014-12-07 116 views
0

想要的是“folder_set”或“File_set”或文件夹/文件列出“For”命令的一部分通过变量被引用。 假设我们希望定义设置文件夹中的“对/ d”是:批处理Folder_Set作为变量

SET "FOLDERSET=X* Y* Zee*" 

,并希望类似

for %%B in (!FOLDERSET!) do (

会产生通过数组作为实际文件夹,而迭代的奇迹不仅仅是一个字符串数组。 它似乎只是使用

SET "FOLDERSET=*" 

SET "FOLDERSET=S*" 

与 “S” 开头的文件夹或

SET "FOLDERSET=S* G*" 

时再次以 “S” 开头的文件夹,工作与G *没有迭代,但最初的问题仍然是为上面的通配符列表设置适当的分隔符。任何可能的方式?

回答

0

这是一个更通用的解决方案,用于查找指定文件夹中指定文件夹MYDIRFOUND的第一个匹配项,并在指定的驱动器范围内设置FOLDERSET。在以FOLDERSET中的字母开头的名称的根文件夹中的某处创建名为MYDIRFOUND的文件夹:

Setlocal EnableDelayedExpansion 
SET "FOLDERSET=ZZ* D* G* S* T*" 


for %%T in (B C D F G) do (
if exist %%T: (

%%T: 
cd \ 
for /D %%C in (!FOLDERSET!) do (

REM pushd popd won't upset the outer loop 
pushd %%C 

for /D /R %%K in (*) do (
REM MUST be (*) or will recurse for subfolders matching FOLDERSET. MYDIRFOUND is not one of them. 

Set "MYTEMP=%%K" 
SET "_MYDIR=!MYTEMP:MYDIRFOUND=!" 

IF NOT !MYTEMP!==!_MYDIR! (
call SET "_MYDIR=%%~K" 
goto MYDIRFOUND 
) 
) 
popd 
) 

REM DRIVE LOOP AND EXIST 
) 
) 
goto eof 
:MYDIRFOUND 
echo !_MYDIR! 
echo success 
pause 
1

我没有看到你有什么问题。这对我的作品完全没有问题,除非我不明白你的问题:

@echo off 
setlocal 
set "folderset=s* x*" 

echo Using normal expansion: 
for /d %%F in (%folderset%) do @echo %%F 
echo(

echo Using delayed expansion 
setlocal enableDelayedExpansion 
for /d %%F in (!folderset!) do @echo %%F 

--OUTPUT--

Using normal expansion: 
SETA 
size 
snake 
svnsave 
svntest 
xml 
xyz 

Using delayed expansion 
SETA 
size 
snake 
svnsave 
svntest 
xml 
xyz 

有与包含%%的F值延迟扩张的潜在问题如果启用延迟扩展,!将在扩展时损坏。