中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-25 21:44
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,275 会员排行
DOS学习入门 & 精彩文章 (教学室) » [已解決]如何使用for指令尋找檔案路徑~?
可打印版本  1,644 / 13
第1楼 adan 发表于 2007-09-19 19:02
初级用户 发帖 21 积分 56
[已解決]如何使用for指令尋找檔案路徑~?
在自製整合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楼 lxmxn 发表于 2007-09-19 19:43
版主 发帖 4,938 积分 11,386
try this:
第3楼 adan 发表于 2007-09-19 19:56
初级用户 发帖 21 积分 56
剛才試了版主所給的指令~成功了~

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

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

再次感謝版主~
第4楼 lxmxn 发表于 2007-09-19 20:02
版主 发帖 4,938 积分 11,386
  关键是for命令的 /R 参数要理解一下,就是遍历子目录,后面接需要开始遍历的“根目录”参数,这里是“c:\program files\adobe\”,表示从“c:\program files\adobe\”开始遍历,括号()里面的“reader”表示需要找的文件/文件夹的名称,/r 参数结合/d参数,就是遍历文件夹了,再加上“if exist”使命令更加健壮了。
第5楼 adan 发表于 2007-09-19 20:10
初级用户 发帖 21 积分 56
版大真是熱心教學,受教了~~

可否再請問指令中
for /d /r "c:\program files\adobe\" %%a in (reader) do @if exist "%%a" set paths=%%a
為何需要加上"@"字元呢?~?有何作用~??
第6楼 lxmxn 发表于 2007-09-19 20:15
版主 发帖 4,938 积分 11,386
Re adan:

呵呵,这是个人习惯,一般用在命令前面屏蔽命令行的回显,也可不要。
第7楼 adan 发表于 2007-09-19 21:19
初级用户 发帖 21 积分 56
嗯~問了一個問題從版大那得到不少的學問~: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楼 lxmxn 发表于 2007-09-19 22:43
版主 发帖 4,938 积分 11,386
Re adan:

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

如果你想显示包含版本号的文件夹,可以这样:
第9楼 lp1129 发表于 2007-09-19 22:49
初级用户 发帖 92 积分 186
以下命令中是遍历目录树
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楼 lxmxn 发表于 2007-09-19 23:51
版主 发帖 4,938 积分 11,386
Re lp1129:

一般就只有第一种情况,而你说的情况是特殊情况,具体情况具体对待嘛。
第11楼 lp1129 发表于 2007-09-20 14:24
初级用户 发帖 92 积分 186
对,lxmxn版主指点的很正确,具体情况具体对待,最近刚学会不久,写批处理考虑的太多就画蛇添足了。
第12楼 lp1129 发表于 2007-09-20 14:36
初级用户 发帖 92 积分 186
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楼 adan 发表于 2007-09-21 16:54
初级用户 发帖 21 积分 56
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楼 lxmxn 发表于 2007-09-21 16:59
版主 发帖 4,938 积分 11,386
Re adan:

关于你的这个问题,已经在4楼明确的说明了。
关键是for命令的 /R 参数要理解一下,就是遍历子目录,后面接需要开始遍历的“根目录”参数。
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023