中国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
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: