标题: [已解決]如何使用for指令尋找檔案路徑~?
[打印本页]
作者: adan
时间: 2007-9-19 19:02
标题: [已解決]如何使用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 ]
作者: lxmxn
时间: 2007-9-19 19:43
try this:
for /d /r "c:\program files\adobe\" %%a in (reader) do @if exist "%%a" set paths=%%a
echo %paths%
作者: adan
时间: 2007-9-19 19:56
剛才試了版主所給的指令~
成功了~
真是太感謝版主了!!!雖然不太懂詳細指令語法是何意義,不過還是十分感謝~~
如果有那位版大可以解釋一下,可以從中學習到for指令用法~
再次感謝版主~
作者: lxmxn
时间: 2007-9-19 20:02
关键是for命令的 /R 参数要理解一下,就是遍历子目录,后面接需要开始遍历的“根目录”参数,这里是“c:\program files\adobe\”,表示从“c:\program files\adobe\”开始遍历,括号()里面的“reader”表示需要找的文件/文件夹的名称,/r 参数结合/d参数,就是遍历文件夹了,再加上“if exist”使命令更加健壮了。
作者: adan
时间: 2007-9-19 20:10
版大真是熱心教學,受教了~~
可否再請問指令中
for /d /r "c:\program files\adobe\" %%a in (reader) do @if exist "%%a" set paths=%%a
為何需要加上"@"字元呢?~?有何作用~??
作者: lxmxn
时间: 2007-9-19 20:15
Re adan:
呵呵,这是个人习惯,一般用在命令前面屏蔽命令行的回显,也可不要。
作者: adan
时间: 2007-9-19 21:19
嗯~問了一個問題從版大那得到不少的學問~: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"??
作者: lxmxn
时间: 2007-9-19 22:43
Re adan:
这里的%%a指的是找到之后匹配的全部目录字符串,而不是路径中的一部分部分。
如果你想显示包含版本号的文件夹,可以这样:
for /f "delims=" %%a in ('dir /b/ad/s "c:\program files\adobe\acrobat*"') do @if exist "%%~fa" echo %%~na
作者: lp1129
时间: 2007-9-19 22:49
以下命令中是遍历目录树
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文件夹就会出现其它目录
作者: lxmxn
时间: 2007-9-19 23:51
Re lp1129:
一般就只有第一种情况,而你说的情况是特殊情况,具体情况具体对待嘛。
作者: lp1129
时间: 2007-9-20 14:24
对,lxmxn版主指点的很正确,具体情况具体对待,最近刚学会不久,写批处理考虑的太多就画蛇添足了。
作者: lp1129
时间: 2007-9-20 14:36
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%
作者: adan
时间: 2007-9-21 16:54
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 ]
作者: lxmxn
时间: 2007-9-21 16:59
Re adan:
关于你的这个问题,已经在4楼明确的说明了。
Quote: |
关键是for命令的 /R 参数要理解一下,就是遍历子目录,后面接需要开始遍历的“根目录”参数。 |
|