中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS学习入门 & 精彩文章 (教学室) » [已解決]如何使用for指令尋找檔案路徑~?
作者:
标题: [已解決]如何使用for指令尋找檔案路徑~? 上一主题 | 下一主题
adan
初级用户





积分 56
发帖 21
注册 2007-9-19
状态 离线
『楼 主』:  [已解決]如何使用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 ]

2007-9-19 19:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

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-9-19 22:39


2007-9-19 19:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
adan
初级用户





积分 56
发帖 21
注册 2007-9-19
状态 离线
『第 3 楼』:  

剛才試了版主所給的指令~成功了~

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

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

再次感謝版主~

2007-9-19 19:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 4 楼』:  

  关键是for命令的 /R 参数要理解一下,就是遍历子目录,后面接需要开始遍历的“根目录”参数,这里是“c:\program files\adobe\”,表示从“c:\program files\adobe\”开始遍历,括号()里面的“reader”表示需要找的文件/文件夹的名称,/r 参数结合/d参数,就是遍历文件夹了,再加上“if exist”使命令更加健壮了。

2007-9-19 20:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
adan
初级用户





积分 56
发帖 21
注册 2007-9-19
状态 离线
『第 5 楼』:  

版大真是熱心教學,受教了~~

可否再請問指令中
for /d /r "c:\program files\adobe\" %%a in (reader) do @if exist "%%a" set paths=%%a
為何需要加上"@"字元呢?~?有何作用~??

2007-9-19 20:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 6 楼』:  

Re adan:

呵呵,这是个人习惯,一般用在命令前面屏蔽命令行的回显,也可不要。

2007-9-19 20:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
adan
初级用户





积分 56
发帖 21
注册 2007-9-19
状态 离线
『第 7 楼』:  

嗯~問了一個問題從版大那得到不少的學問~: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"??

2007-9-19 21:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 8 楼』:  

Re adan:

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

如果你想显示包含版本号的文件夹,可以这样:
for /f "delims=" %%a in ('dir /b/ad/s "c:\program files\adobe\acrobat*"') do @if exist "%%~fa" echo %%~na


2007-9-19 22:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lp1129
初级用户





积分 186
发帖 92
注册 2007-3-27
状态 离线
『第 9 楼』:  

以下命令中是遍历目录树
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文件夹就会出现其它目录

2007-9-19 22:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 10 楼』:  

Re lp1129:

一般就只有第一种情况,而你说的情况是特殊情况,具体情况具体对待嘛。

2007-9-19 23:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lp1129
初级用户





积分 186
发帖 92
注册 2007-3-27
状态 离线
『第 11 楼』:  

对,lxmxn版主指点的很正确,具体情况具体对待,最近刚学会不久,写批处理考虑的太多就画蛇添足了。

2007-9-20 14:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lp1129
初级用户





积分 186
发帖 92
注册 2007-3-27
状态 离线
『第 12 楼』:  



  Quote:
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%

2007-9-20 14:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
adan
初级用户





积分 56
发帖 21
注册 2007-9-19
状态 离线
『第 13 楼』:  

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 ]

2007-9-21 16:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 14 楼』:  

Re adan:

关于你的这个问题,已经在4楼明确的说明了。

  Quote:
关键是for命令的 /R 参数要理解一下,就是遍历子目录,后面接需要开始遍历的“根目录”参数。



2007-9-21 16:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: