中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解決]將兩多只差別分析檔案不同的批處理程序簡化
作者:
标题: [已解決]將兩多只差別分析檔案不同的批處理程序簡化 上一主题 | 下一主题
XZ
初级用户





积分 144
发帖 65
注册 2008-3-20
来自 Taiwan
状态 离线
『楼 主』:  [已解決]將兩多只差別分析檔案不同的批處理程序簡化

請問如下將下面的批處理簡化 當從DB-1~DB-10 這樣就要寫成好大一串 但是差別的只有檔案名稱與輸出的解果 謝謝!!
set DB-1=DB-1-Chip.ini
set DB-2=DB-2-Display.ini
set DB-3=DB-2-Audio.ini
set DB-4=DB-4-.ini
set DB-5=DB-5-.ini
set DB-9=DB-9-Vendor.ini

echo.
SET xxxxx=%~dp0
set source=%xxxxx:~0,-1%
echo Source Path
echo %source%
pause

CALL :Processor-DB-1
CALL :Processor-DB-2
goto Zend


:Processor-DB-1
for /f "eol=# tokens=1,2,3* delims=	 usebackq" %%i in ( "%source%\9-DataBase\DB-1-Chip.ini" ) do (
set Match-DB-1-VDID=%%i 
set Match-DB-1-Name=%%j 
set Match-DB-1-Path=%%k 
:: "%source%\devcon" find pci\* | find /i "%%i" && goto Match-DB-2
reg query HKLM\SYSTEM\CurrentControlSet\Enum\PCI | find /i "%%i" >nul 2>nul && goto Match-DB-1
)
echo Sorry !!
echo No match chip is DB-1-Chip!
goto :eof

:Match-DB-1
echo Chip is 
echo %Match-DB-1-VDID:~0,8%^&%Match-DB-1-VDID:~-9%
echo %Match-DB-1-Name%
echo %Match-DB-1-Path%
echo.
goto :eof


:Processor-DB-2
for /f "eol=# tokens=1,2,3* delims=	 usebackq" %%i in ( "%source%\9-DataBase\DB-2-Display.ini" ) do (
set Match-DB-2-VDID=%%i 
set Match-DB-2-Name=%%j 
set Match-DB-2-Path=%%k 
:: "%source%\devcon" find pci\* | find /i "%%i" && goto Match-DB-2
reg query HKLM\SYSTEM\CurrentControlSet\Enum\PCI | find /i "%%i" >nul 2>nul && goto Match-DB-2
)
goto :eof

:Match-DB-2
echo Display is
echo %Match-DB-2-VDID:~0,8%^&%Match-DB-2-VDID:~-9%
echo %Match-DB-2-Name%
echo %Match-DB-2-Path%
echo.
goto :eof


:Zend
pause
結果:
Source Path
\\127.0.0.1\新資料夾\asdf 123\qwer 456
請按任意鍵繼續 . . .
Chip is
VEN_8086&DEV_27DF
Intel Chip 7
\INTEL\Chip\7Setup.exe

Display is
VEN_1002&DEV_9589
ATI Radeon HD 900 PRO
\ATI\2600PRo\9Setup.exe

請按任意鍵繼續 . . .
[ Last edited by XZ on 2008-7-24 at 09:51 PM ]


2008-7-20 14:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




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

说实话,没听懂你要做什么。。


2008-7-21 06:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
XZ
初级用户





积分 144
发帖 65
注册 2008-3-20
来自 Taiwan
状态 离线
『第 3 楼』:  

@@a 我表達能力太差了 就是 :Processor-DB-1 for /f "eol=# tokens=1,2,3* delims= usebackq" %%i in ( "%source%\9-DataBase\DB-1-Chip.ini" ) do ( set Match-DB-1-VDID=%%i set Match-DB-1-Name=%%j set Match-DB-1-Path=%%k reg query HKLM\SYSTEM\CurrentControlSet\Enum\PCI | find /i "%%i" >nul 2>nul && goto Match-DB-1 ) :Processor-DB-2 for /f "eol=# tokens=1,2,3* delims= usebackq" %%i in ( "%source%\9-DataBase\DB-2-Display.ini" ) do ( set Match-DB-2-VDID=%%i set Match-DB-2-Name=%%j set Match-DB-2-Path=%%k reg query HKLM\SYSTEM\CurrentControlSet\Enum\PCI | find /i "%%i" >nul 2>nul && goto Match-DB-2 ) 差別的地方就是 紅色和藍色的地方 請問要怎樣才能縮短批處理 因為一共有10個左右 DB-1-Chip.ini DB-2-Display.ini DB-3-Audio.ini DB-4-Lan.ini DB-5-...... DB-6-...... DB-7-...... DB-8-...... 勞帆各位解答了 若還有解釋不清楚的煩請告訴我一下 因為這實在是想不出來縮短的方法 只知道可能用 For /F 但是不知道怎了做 謝謝


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




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

@echo off&setlocal EnableDelayedExpansion

set DB-1=DB-1-Chip.ini
set DB-2=DB-2-Display.ini
set DB-3=DB-2-Audio.ini
set DB-4=DB-4-.ini
set DB-5=DB-5-.ini
set DB-9=DB-9-Vendor.ini

for %%a in (1,2,3,4,5,9) do call:loop %%a
pause&goto:EOF

:loop
for /f "eol=# tokens=1,2,3* delims=         usebackq" %%i in ( "%source%\9-DataBase\!DB-%~1!" ) do (
set Match-DB-%~1-VDID=%%i 
set Match-DB-%~1-Name=%%j 
set Match-DB-%~1-Path=%%k 
:: "%source%\devcon" find pci\* | find /i "%%i" && goto Match
reg query HKLM\SYSTEM\CurrentControlSet\Enum\PCI | find /i "%%i" >nul 2>nul && goto Match
)
echo Sorry !!
echo No match chip is !DB-%~1!
goto :eof

:Match
echo Chip is 
echo %Match-DB-%~1-VDID:~0,8%^&%Match-DB-%~1-VDID:~-9%
echo %Match-DB-%~1-Name%
echo %Match-DB-%~1-Path%
echo.
没有测试,不过可以看看for+call 的思路,用call传递可变参数。


   此帖被 +2 点积分    点击查看详情   
评分人:【 XZ 分数: +2  时间:2008-7-24 19:54


2008-7-22 21:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
XZ
初级用户





积分 144
发帖 65
注册 2008-3-20
来自 Taiwan
状态 离线
『第 5 楼』:  

感謝您!! 雖然還是不行 至少我多學到一樣關於FOR的應用 ^^ 我在想想看 不行的話就直接寫著10行^^" 批處理的學問還真深奧 內容:
setlocal enabledelayedexpansion

set DB-1=DB-1-Chip.ini
set DB-2=DB-2-Display.ini



echo on
SET xxxxx=%~dp0
set source=%xxxxx:~0,-1%
echo Source Paht is %Source%

for %%a in (1) do call:loop1 %%a
pause&goto:EOF


goto Zend

for %%a in (1,2,3,4,5,9) do call:loop %%a
pause&goto:EOF

:loop1
set aaa=!DB-%~1!
echo !DB-%~1!
for /f "eol=# tokens=1,2,3,4* delims=	 usebackq" %%i in ( "%source%\9-DataBase\!DB-%~1!" ) do (
set Match-DB-%~1-VDID=%%i 
set Match-DB-%~1-Name=%%j 
set Match-DB-%~1-Path=%%k
set Match-DB-%~1-Runs=%%l
set Match-DB-%~1-cmds=%%m
reg query HKLM\SYSTEM\CurrentControlSet\Enum\PCI | find /i "%%i" >nul 2>nul && goto Match
)
echo Sorry !!
echo No match chip in !DB-%~1!!
goto :eof

:Match
echo on
echo.
::echo Match-!DB-%~1!-VDID
echo %Match-DB-%~1-Name%
echo %Match-DB-%~1-Path%
::echo %Match-!DB-%~1!-Runs%
::echo %Match-!DB-%~1!-cmds%
goto :eof



:Zend
結果:
for %a in (1) do call:loop1 %a

call:loop1 1

set aaa=!DB-1!

echo !DB-1!
DB-1-Chip.ini

for /F "eol=# tokens=1,2,3,4* delims=    usebackq" %i in ("C:\Documents and Settings\misdrv\桌面\_In
stallPubDriver_\9-DataBase\!DB-1!") do (
set Match-DB-1-VDID=%i
 set Match-DB-1-Name=%j
 set Match-DB-1-Path=%k
 set Match-DB-1-Runs=%l
 set Match-DB-1-cmds=%m
 reg query HKLM\SYSTEM\CurrentControlSet\Enum\PCI   | find /i "%i"   1>nul 2>nul  && goto Match
)

(
set Match-DB-1-VDID=VEN_8086&DEV_24DB
 set Match-DB-1-Name=Intel Chip 845
 set Match-DB-1-Path=Intel\Down-845
 set Match-DB-1-Runs=win2k_xp147.exe
 set Match-DB-1-cmds=
 reg query HKLM\SYSTEM\CurrentControlSet\Enum\PCI   | find /i "VEN_8086&DEV_24DB"   1>nul 2>nul  &&
goto Match
)

(
set Match-DB-1-VDID=VEN_8086&DEV_27C0
 set Match-DB-1-Name=Intel Chip 945
 set Match-DB-1-Path=Intel\Up-865
 set Match-DB-1-Runs=infinst_autol.exe
 set Match-DB-1-cmds=
 reg query HKLM\SYSTEM\CurrentControlSet\Enum\PCI   | find /i "VEN_8086&DEV_27C0"   1>nul 2>nul  &&
goto Match
)

(
set Match-DB-1-VDID=VEN_8086&DEV_7111
 set Match-DB-1-Name=Intel Chip 945
 set Match-DB-1-Path=Intel\Up-865
 set Match-DB-1-Runs=infinst_autol.exe
 set Match-DB-1-cmds=
 reg query HKLM\SYSTEM\CurrentControlSet\Enum\PCI   | find /i "VEN_8086&DEV_7111"   1>nul 2>nul  &&
goto Match
)

echo on

echo.


echo ~1-Name
~1-Name

echo ~1-Path
~1-Path

goto :eof

pause & goto:EOF
請按任意鍵繼續 . . .
[ Last edited by XZ on 2008-7-24 at 09:18 PM ]


2008-7-24 20:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
XZ
初级用户





积分 144
发帖 65
注册 2008-3-20
来自 Taiwan
状态 离线
『第 6 楼』:  

找到原因了ˇˇ 要把 % 改成 ! 可以繼續往下寫了 下次有問題在勞煩幫幫忙了 謝謝 :Match echo on echo. echo. !Match-DB-%~1-VDID:~0,8!^&!Match-DB-%~1-VDID:~-9! echo. !Match-DB-%~1-Name! echo. !Match-DB-%~1-Path! echo. !Match-DB-%~1-Runs! echo. !Match-DB-%~1-cmds! goto :eof
echo on

echo.


echo. !Match-DB-1-VDID:~0,8!&!Match-DB-1-VDID:~-9!
 VEN_8086&DEV_7111

echo. !Match-DB-1-Name!
 Intel Chip 945

echo. !Match-DB-1-Path!
 Intel\Up-865

echo. !Match-DB-1-Runs!
 infinst_autol.exe

echo. !Match-DB-1-cmds!


goto :eof

pause & goto:EOF
請按任意鍵繼續 . . .
[ Last edited by XZ on 2008-7-24 at 09:52 PM ]


2008-7-24 21:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
XZ
初级用户





积分 144
发帖 65
注册 2008-3-20
来自 Taiwan
状态 离线
『第 7 楼』:  

順道一問 這兩行一樣都是帶 DB-%~1 出來的結果怎麼會不一樣 FOR底下是全名DB-1-Chip.ini FOR之後的SET卻只有 DB-1 若我要取值至 DB-1-Chip 該如何做呢? 謝謝 語法 for /f "eol=# tokens=1,2,3,4* delims= usebackq" %%i in ( "%source%\9-DataBase\!DB-%~1!" ) do ( set Match-DB-%~1-VDID=%%i 結果 echo !DB-1! DB-1-Chip.ini for /F "eol=# tokens=1,2,3,4* delims= usebackq" %i in ("C:\Documents and Settings\misdrv\桌面\_In stallPubDriver_\9-DataBase\!DB-1!") do ( set Match-DB-1-VDID=%i 目前我只知道
echo !DB-%~1!
echo DB-%~1
echo !DB-%~1:~0,-4!
echo !DB-%~1:~3,-4!
會輸出
DB-1-Chip.ini
DB-1
DB-1-Chip
1-Chip
[ Last edited by XZ on 2008-7-24 at 10:17 PM ]


2008-7-24 21:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: