目标是在MYFOLDER中显示目录名称。 MY.exe存在于该文件夹中,但奇怪的是,没有... \ desktemp *中的通配符," @echo显示子文件夹"永远不会显示,但是" @echo G正在工作"是。但是,当移动到其中一个子文件夹时,永远找不到MY.exe。
OTOH当前代码永远不会找到MY.exe而且从不显示" @echo G正在工作"但正确列出每个子文件夹:" @echo显示子文件夹"。
另一个问题是永远不会到达块末尾的暂停。
用
代替内在的Forcd \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"通过提示进入变量。 嵌套块中的转义字符,分隔符和引号是否正确实现?
答案 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”)