中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-03 14:04
中国DOS联盟论坛 » DOS学习入门 & 精彩文章 (教学室) » [已解決]如何使用for指令尋找檔案路徑~? 查看 1,380 回复 13
楼 主 [已解決]如何使用for指令尋找檔案路徑~? 发表于 2007-09-19 19:02 ·  中国 台湾 中华电信(HiNet)数据中心
初级用户
积分 56
发帖 21
注册 2007-09-19 17:38
18年会员
UID 97808
性别 男
状态 离线
在自製整合xp當中也常遇到以下問題:

需要將光碟某些檔案複製到系統硬碟某些程式的資料夾內,例如...
將光碟根目錄下的dreye32.xpi複製到C:\program and files\adobe\???\reader\下
此時複製檔案路徑???非一定值,可能為"acrobat 7.0"或"acrobat 8.0"又或者是
其它版本的acrobat reader
在原先cmd內建指令中只有for可用,所以我使用了

for /d %%i in (*.*) do if exist "%programfiles%\adobe\%%i\reader\" set path=%%i

想把???等字元以萬用字元掃描出來
ps:dos指令下將%%i ---->%i

不過執行結果*.*卻只用"開始功能表"、"桌面"、"cookies"....等字串掃描
無法使用萬用字元掃描...

請問各位先進如何在for指令下用萬用字元掃描???感謝~:D

[ Last edited by adan on 2007-9-19 at 10:27 PM ]
2 发表于 2007-09-19 19:43 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
try this:

for /d /r "c:\program files\adobe\" %%a in (reader) do @if exist "%%a" set paths=%%a
echo %paths%
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
adan +1 2007-09-19 22:39
3 发表于 2007-09-19 19:56 ·  中国 台湾 中华电信(HiNet)数据中心
初级用户
积分 56
发帖 21
注册 2007-09-19 17:38
18年会员
UID 97808
性别 男
状态 离线
剛才試了版主所給的指令~成功了~

真是太感謝版主了!!!雖然不太懂詳細指令語法是何意義,不過還是十分感謝~~

如果有那位版大可以解釋一下,可以從中學習到for指令用法~

再次感謝版主~
4 发表于 2007-09-19 20:02 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
  关键是for命令的 /R 参数要理解一下,就是遍历子目录,后面接需要开始遍历的“根目录”参数,这里是“c:\program files\adobe\”,表示从“c:\program files\adobe\”开始遍历,括号()里面的“reader”表示需要找的文件/文件夹的名称,/r 参数结合/d参数,就是遍历文件夹了,再加上“if exist”使命令更加健壮了。
5 发表于 2007-09-19 20:10 ·  中国 台湾 中华电信(HiNet)数据中心
初级用户
积分 56
发帖 21
注册 2007-09-19 17:38
18年会员
UID 97808
性别 男
状态 离线
版大真是熱心教學,受教了~~

可否再請問指令中
for /d /r "c:\program files\adobe\" %%a in (reader) do @if exist "%%a" set paths=%%a
為何需要加上"@"字元呢?~?有何作用~??
6 发表于 2007-09-19 20:15 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
Re adan:

呵呵,这是个人习惯,一般用在命令前面屏蔽命令行的回显,也可不要。
7 发表于 2007-09-19 21:19 ·  中国 台湾 中华电信(HiNet)数据中心
初级用户
积分 56
发帖 21
注册 2007-09-19 17:38
18年会员
UID 97808
性别 男
状态 离线
嗯~問了一個問題從版大那得到不少的學問~:D

可否再請問指令之中:
for /d /r "c:\program files\adobe\" %%a in (reader) do @if exist "%%a" set paths=%%a
意為:
在c:\program files\adobe\尋找萬用字元(/d)及樹狀目錄下(/r)若(if exist)在變數%%a目錄下存在reader目錄則設置(set)變數%%a為path變數(%paths%)。
那為何ECHO %paths%卻顯示"c:\program files\adobe\acrobat 8.0\reader

而非顯示指定字串"acrobat 8.0"??
8 发表于 2007-09-19 22:43 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
Re adan:

这里的%%a指的是找到之后匹配的全部目录字符串,而不是路径中的一部分部分。

如果你想显示包含版本号的文件夹,可以这样:

for /f "delims=" %%a in ('dir /b/ad/s "c:\program files\adobe\acrobat*"') do @if exist "%%~fa" echo %%~na
9 发表于 2007-09-19 22:49 ·  中国 陕西 渭南 电信
初级用户
★★
积分 186
发帖 92
注册 2007-03-27 08:20
19年会员
UID 83047
性别 男
状态 离线
以下命令中是遍历目录树
for /d /r "c:\program files\adobe\" %%a in (reader) do @if exist "%%a" set paths=%%a

%%a代表的是c:\program files\adobe\目录下所有包含reader子目录的目录名

可以是以下几种:

c:\program files\adobe\acrobat 8.0\reader
c:\program files\adobe\123\reader
c:\program files\adobe\123\123\reader

如是只有一个reader文件夹就只有第一种,如果还有其它reader文件夹就会出现其它目录
10 发表于 2007-09-19 23:51 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
Re lp1129:

一般就只有第一种情况,而你说的情况是特殊情况,具体情况具体对待嘛。
11 发表于 2007-09-20 14:24 ·  中国 陕西 渭南 电信
初级用户
★★
积分 186
发帖 92
注册 2007-03-27 08:20
19年会员
UID 83047
性别 男
状态 离线
对,lxmxn版主指点的很正确,具体情况具体对待,最近刚学会不久,写批处理考虑的太多就画蛇添足了。
12 发表于 2007-09-20 14:36 ·  中国 陕西 渭南 电信
初级用户
★★
积分 186
发帖 92
注册 2007-03-27 08:20
19年会员
UID 83047
性别 男
状态 离线
Originally posted by adan at 2007-9-19 09:19 PM:
那為何ECHO %paths%卻顯示"c:\program files\adobe\acrobat 8.0\reader

而非顯示指定字串"acrobat 8.0"??


找到一种方法可以显示出acrobat 8.0

变量载取!

ECHO %paths:~23,-7%
13 发表于 2007-09-21 16:54 ·  中国 台湾 中华电信(HiNet)数据中心
初级用户
积分 56
发帖 21
注册 2007-09-19 17:38
18年会员
UID 97808
性别 男
状态 离线
RE:lp1129

嗯~在這中國DOS聯盟果然高手很多
您應該是利用參數%PATHS%內的字元順序將字串取出:
%PATHS%="C:\Program Files\Adobe\Reader 8.0\Reader"
1 6 23 -7 -1
不過此指令我是用在將翻譯軟體的*.xpi檔外掛至acrobat reader,使開啟pdf檔時能利用翻譯軟體"即時"翻譯。也就是說,有些圖像文字軟體都需要尋找出來複製外掛,所以有可能所謂的%paths%變數內有許多組我所需要的字串,是否有辦法將變數內各組皆用此法取出字串,例%paths%變數為
"C:\Program Files\Adobe\Acrobat 6\Reader"
"C:\Program Files\Adobe\Acrobat 7.0\Reader"
"C:\Program Files\Adobe\Reader 8.0\Reader"

取出"Acrobat 6","Acrobat 7.0","Reader 8.0"三組字串?

RE:lxmxn

請問一下1樓所說的指令在參數的順序上是否有一定的順序
"for /d /r "%programfiles%\adobe\" %a in (reader) do @if exist "%a" set paths=%a"------------->可以執行

"for /r /d "%programfiles%\adobe\" %a in (reader) do @if exist "%a" set paths=%a"------------->不可執行

[ Last edited by adan on 2007-9-21 at 05:01 PM ]
14 发表于 2007-09-21 16:59 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
Re adan:

关于你的这个问题,已经在4楼明确的说明了。
关键是for命令的 /R 参数要理解一下,就是遍历子目录,后面接需要开始遍历的“根目录”参数。
论坛跳转: