|
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
状态 离线
|
|
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 |
|
|