使用批处理迭代目录

时间:2014-12-01 23:03:01

标签: batch-file directory wildcard dir

目标是在MYFOLDER中显示目录名称。 MY.exe存在于该文件夹中,但奇怪的是,没有... \ desktemp *中的通配符," @echo显示子文件夹"永远不会显示,但是" @echo G正在工作"是。但是,当移动到其中一个子文件夹时,永远找不到MY.exe。

OTOH当前代码永远不会找到MY.exe而且从不显示" @echo G正在工作"但正确列出每个子文件夹:" @echo显示子文件夹"。

另一个问题是永远不会到达块末尾的暂停。

代替内在的For
cd \Users\%USERNAME%\Desktop
for /D /r %%G in ("desktemp*") do (

获得基本相同的结果。如果移动到desktemp的子文件夹之一,则找不到My.exe。

Setlocal EnableDelayedExpansion
set CURRDRIVE=C
SET MYFOLDER=
:SEARCHDRIVES


REM BLOCK

for %%B in (C) do (
if exist %%B: (

PUSHD %%B:\
if NOT DEFINED MYFOLDER (
ECHO "%CD%"
REM This always displays path batch is run from.
REM The above Pushd doesn't change to C:\ 

for /f "tokens=*" %%G in ('dir /b /s /a:d "%%B:\Users\%USERNAME%\Desktop\desktemp*" ^| find "\"') do (
@echo Showing subfolders
@echo %%G
pause
if exist "%%G\MY.exe" (
call set MYFOLDER=%%G
@echo %%G
@echo G is working
call echo %MYFOLDER%
pause
GOTO GOTMYFOLDER
)
)
)

)
REM Exist Drive
)
REM Drives Loop


:GOTMYFOLDER
cd /d %CURRDRIVE%:\
echo %MYFOLDER%
cd  %MYFOLDER%
pause

以上是从较大的代码块中削减的块:最终目标是获取文件夹名称" \ Users \ New \ Desktop \ desktemp"通过提示进入变量。 嵌套块中的转义字符,分隔符和引号是否正确实现?

1 个答案:

答案 0 :(得分:0)

答案从这个可怜的小脑中逃脱,直到它对“DIR”和“For / D / R”真正达到了什么。寻求的是增加一个新的“For / D”(no / R)。

这第一个(额外的)“For / D”确定要迭代的文件夹名称。 (特别是除了Windows目录以外我们遇到> 260文件名的问题。)

这将MY.exe文件定位在Users文件夹中的某个位置(更确切地说,在以U开头的任何根文件夹中):

Setlocal EnableDelayedExpansion
set CURRDRIVE=C
SET MYFOLDER=
:SEARCHDRIVES


REM BLOCK

for %%B in (C) do (
if exist %%B: (

PUSHD %%B:\
if NOT DEFINED MYFOLDER (
ECHO "%CD%"
REM This always displays path batch is run from.
REM The above Pushd doesn't change to C:\ 
for /D %%Z in (U*) do (

cd \%%Z
for /D /r %%G in ("*") do (

if exist "%%G\MY.exe" (
call set MYFOLDER=%%G
@echo %%G
@echo G is working
call echo %MYFOLDER%
pause
GOTO GOTMYFOLDER
)
)
)
)

)
REM Exist Drive
)
REM Drives Loop


:GOTMYFOLDER
cd /d %CURRDRIVE%:\
echo %MYFOLDER%
cd  %MYFOLDER%
pause

编辑:

以下评论中的错误垃圾邮件来源是此命令:

Insert batch code to elevate UAC privileges [code][1] from TanisDL
Setlocal EnableDelayedExpansion & pushd "%CD%" & CD /D "%~dp0"
set CURRDRIVE=C

FOR / F“usebackq delims ==”%% G IN(dir %CURRDRIVE%:\ /A:D /O:G /S /B ^| FIND /I "myString")DO(设置“foundMyString = %% ~pG”)