案例一:html
SQLServer安裝錯誤之------>沒法打開項 UNKNOWN\Components\DA42BC89BF25F5BD0AF18C3B9B1A1EE8\c1c4f01781cc94c4c8fb1542c0981a2awindows
案例二:post
AppScan安裝報錯提示----->沒法打開鍵:UNKNOWN \Components DA42BC89BF25F5BD0AF18C3B9B1AEE815706A9FD8039275498234A132634C9Durl
解決辦法:命令行
1. 依次點擊開始,全部程序,附件,右鍵單擊命令提示符,選擇以管理員身份運行。
2. 複製或手動輸入下列命令, secedit /configure /cfg %windir%\inf\defltbase.inf /db defltbase.sdb /verbose
3. 待運行完成後,從新嘗試安裝(步驟二運行可能會提示有錯誤,不用管)
命令格式:for{%variable |%% variable } in (集合) do command [options]htm
%variable |%% variable: 表明可替換參數。使用%variable經過命令提示符執行for命令。使用%% variable在批處理文件中執行for命令對象
1、參數 /d
for /d %%變量 in (集) do 命令
/d 參數是指定僅對目錄而不是文件執行的for命令。
2、參數 /R
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
在/r 以後的那個路徑,指包含它之下的整個目錄樹(至關於DOS命令tree裏的範圍)中的全部目錄,若是僅爲一個英文句點 . ,是指當前路徑下的目錄樹,若是省略了路徑則特指當前目錄,而以後的in (集)則至關於與前面每一個目錄相配的文件集
這裏按in(集)中有無通配符分兩種狀況
1) in(集)中沒有通配符
指定的是單個文件或列舉的具體文件(多個文件名之間用分隔符分隔,如空格、逗號等)
例
@echo of
for /r . %i in (abc.txt) do echo. > %i
echo on
注:這裏for /r 後的路徑僅有一個 . 然後面每一個循環中echo. > %i至關於建立一個僅有一空行的文本文件,總體效果是在當前目錄下包括子錄,每一個目錄中建一個abc.txt。
例 (放入批處理中)
@echo off
rem 顯示d:盤中全部文件名爲file1和file2的列表
for /r d:\ %%h in (file1,file2) do if exist%%h echo %%h
pause
2) in(集)中含有通配符*或?
這種裏面的do命令將處理前面 /r指定的目錄系列裏每一個含有in(集)中文件的項,而不去理會不含有相配文件的那些目錄
例4:
@echo off
rem 刪除C盤中全部*.chk的文件
for /r c:\ %%h in (*.chk) do del /q %%h
pause
注:del /q 表示用安靜模式刪除(不需確認)
3、參數 /L
FOR /L %variable IN (start,step,end) DO command [command-parameters]
例如 (1,1,3) 將產生序列 (1 2 3);(1,2,9)將產生序列(1 3 5 7 9);(5,-1,1) 將產生序列 (5 4 3 2 1);(1,3,18)將產生序列(1 7 10 13 16)
例5
@echooff
::在D盤創建aa1~ aa5五個文件夾
for /L%%i in (1,1,5) do md d:\aa %%i
pause
注:在行首,單個冒號:接一名稱,是標號行,對應於批處理中go後指向的位置,而雙冒號::通常是用來做註釋用,註釋在批處理中能夠用rem加空格來表達,兩者稍有不一樣,rem註釋在未關閉命令回顯時會在屏幕顯示出來,而::則什麼狀況下都不會顯示。
4、參數 /f
這個參數/f將會打開(集)裏的文件,使for命令能處理文本文件的讀取和添加刪除替換等編輯性的操做,可謂功能強大,所以也相對複雜一些。
文件名-集
for /f 「選項」 %變量 in ( 「字符串」-集 ) do 命令
‘命令'-集
/f 後能夠帶有幾種選項,不帶選項固然也是合格的格式,而帶有參數則必須以引號總體括起來,後面的集裏主要由三種形式造成的,最終在for循環中的每一輪中會造成讀取一行字符串,來給指定的%變量、以及給因爲選項中派生出附加變量賦值後,執行do後面的命令
下面以例子來具體說明和逐步理解各分項的用法
例6
假定d:\abc.txt內容以下:
姓名 性別 年齡 等-級
張三 男 36 A-1
李四 男 29 B-2
趙六 女 31 A-2
執行以下命令:
for /f %c in (d:\abc.txt) do @echo %c
則屏幕上顯示:
姓名
張三
李四
趙六
解釋:這是for /r 在「%變量」前缺省參數選項時的狀況,循環中每輪會默認以空格爲分隔,在打開的文件中逐行給字符串分段,又由於沒給增添附加變量(即僅一個變量%c)則僅把第一段的字符賦給%c,再執行 do後的命令,而後進行循環的下一輪,而且默認忽略空行
改一下:
for /f 「skip=1 tokens=1,4 delims= 」 %c in(d:\abc.txt) do @echo %c %d
顯示爲:
張三 A-1
李四 B-2
趙六 A-2
解:
skip=1 表示文本開始忽略的行數爲1 ——忽略幾行
delims= 在一行中,用什麼單個符號(能夠有多字符組合,之間也不能加空格,被理解爲多項單個字符,如要空格符須放最後)來分隔字符串做爲讀取賦值的單元(造成一段),本例中等號後是空的表示僅用空格來分隔。——用什麼刀來切分
tokens=1,4 這個等號後的數字表示依次取第幾個被分隔的字符串段,來分別賦給%變量及順序附加的變量,本例取第1個段賦給%c,第4個段賦給c後的一個變量也就是賦給%d,而且,能夠寫成tokens=1,2,5-7或tokens=1,2,3* 或tokens=1,2,5,7分別表示取第1,2,5,6,7(依次賦給%c, %d, %e, %,f, %g共5個變量)、1,2,3及3後的全部段(要賦給3個變量)、1,2,5,7(要賦給4個變量),tokens=後的數字號能夠不按順序,但書寫的順序與分配給變量的順序是對應的,這是賦值,至於以後do命令中用不用是另外一回事。換句話 ——最多隻需取哪幾段
in (變量) 中的那個變量,表明起始的一個變量名,按tokens中定義的總個數來擴充附加變量名,如總個數爲3,則%c 就附加%d和%e ,要是%C就附加%D%E… 本例中tokens=1,4僅需兩個,起始的是in () 括號中的%c 則每行中第一段賦給%c,第4段賦給變量%d
以第二行(第一行被skip=1跳過了)爲例,在 「張三 男 36 A-1 」 中(正好也是用的空格分隔)共被空格之刀切爲五段,只要第一、4,即張三賦給%c, A-1賦給%d,執行@echo %c %d而後下一輪…而空行照舊被省去了。
再稍改一下:
for /f 「skip=1 tokens=4,1 delims=- 「 %c in(d:\abc.txt) do @echo %c %d
則顯示爲:
A 張三
B 李四
A 趙六
例7
假定d:\aa.txt內容以下:
Volume in drive D is MYDA
Volume Serial Number is C35D-8998
Directory of D:tmp
09/25/2001 10:40 AM 11,235 yg0925.txt
11/12/2001 04:29 pM 795 buple.txt
04/11/2002 04:18 AM 2,043 vitn.txt
3File(s) 12,673 bytes
0 Dir(s) 5,020,200,655 bytes free
在命令行輸入:
for /f "skip=5 tokens=5" %a in(d:\aa.txt) do @echo %a
會顯示:
yg0925.txt
buple.txt
vitn.txt
free
本意想把文件裏列出的文件顯示出來(固然也能夠換成對文件進行其餘命令操做)
經過skip=5 忽略掉前5行,默認以空格分隔後tokens=5取每行第五段字符就順利地把文件名賦給變量%a,美中不足最後一行取了個不是文件名的(固然可用其餘方法處理這個多餘的只是for/f中沒提供忽略最後幾行的格式),而倒數第二行則無第五段。
顯然例中aa.txt裏的內容是某次執行dir命令後的內容。它可用相似命令:
dir >d:\aa.txt來創建
題外話,若是在dir中加入合適的參數/b,就能夠迴避多餘的部分,還可加入/ad只顯示目錄,加入/a-d只顯示文件等
那麼,咱們徹底能夠直接書寫命令放入in後的(‘命令'-集)中
for /f "skip=5 tokens=5 " %a in('dir') do @echo %a
效果同樣。
注:命令集需用單引號括起來以表示不是文件集,如用雙引號括起來則表示是字符串集,本例是爲了說明for命令的用法,真正有這種用途也願意用前面「題外話」的方法。若是你在執行本例後什麼也沒顯示,你須要先用集裏的命令先執行一次,看它顯示的格式,也許須要把tokens=5 改爲tokens=4 或許還應當給dir加上參數 /a-d以迴避顯示出目錄。
若是集裏是由多個文件組成,那麼處理完一個文件後又處理完又去處理另外一個文件,每一個文件行數不一樣循環次數(do命令的次數)也將所以不一樣。
若是集裏是由命令產生的系統,那麼你必須首先熟悉該命令執行後會產生怎樣效果的字符系統,才能正確安排後面的do命令
畫龍點睛:不管in後的集是哪一種形式,for/f 都最終分解爲字符串,按須要是否「忽略幾行」(skip=)、「用什麼刀來切分」(delims= )、「最多隻需取哪幾段」(tokens=)將集裏造成的字符串,逐行地分段賦給%或%%後的變量及可能順延擴展出的變量,以執行do後的命令,每一行即爲一輪循環。這裏沒完整說明所有參數,請在命令行用for/?查看。(下面的斜體字是複製的幫助裏的內容)
例如:
對於帶有空格的文件名,您須要用雙引號將文件名括起來。爲了用這種方式來使用雙引號,您還須要使用 usebackq 選項,不然,雙引號會被理解成是用做定義某個要分析的字符串的。——換句話說,帶有usebackq(放在for /f 以後的引號裏)參數時 in ()裏用雙引號表示的還是文件名。
還有一個選項eol= :前面所說skip=是表示忽略開始的幾行,其實默認情況還忽略全部分號「 ; 」開始的行,若是你想不忽略分號開始的行,或者想忽略本身指定一字符開始的行就能夠在for /f 以後那引號參數裏使用eol=你本身定義的字符,但它不像delims=的那樣可定義多個,只容許定義一個。
另外一花樣:能夠用 %~ 操做符將文件名分離成文件名、擴展名、盤符等獨立部分 ,請看for/?中的解釋(其中示例的變量爲%I):
另外,FOR 變量參照的替換已被加強。您如今可使用下列選項語法:
~I - 刪除任何引號("),擴充 %I
%~fI - 將 %I 擴充到一個徹底合格的路徑名
%~dI - 僅將 %I 擴充到一個驅動器號
%~pI - 僅將 %I 擴充到一個路徑
%~nI - 僅將 %I 擴充到一個文件名
%~xI - 僅將 %I 擴充到一個文件擴展名
%~sI - 擴充的路徑只含有短名
%~aI - 將 %I 擴充到文件的文件屬性
%~tI - 將 %I 擴充到文件的日期/時間
%~zI - 將 %I 擴充到文件的大小
%~$PATH:I- 查找列在路徑環境變量的目錄,並將 %I 擴充
到找到的第一個徹底合格的名稱。若是環境變量名
未被定義,或者沒有找到文件,此組合鍵會擴充到空字符串
能夠組合修飾符來獲得多重結果:
%~dpI - 僅將 %I 擴充到一個驅動器號和路徑
%~nxI - 僅將 %I 擴充到一個文件名和擴展名
%~fsI - 僅將 %I 擴充到一個帶有短名的完整路徑名
%~dp$PATH:I- 查找列在路徑環境變量的目錄,並將 %I 擴充
到找到的第一個驅動器號和路徑。
%~ftzaI- 將 %I 擴充到相似輸出線路的 DIR
簡記:凡是 %~ 打頭的操做符,都是文件名或環境變量的分離操做。而每項要想運用自如,則須要付出辛勤的練習。
練習:(我偷點懶,本身不做了...)
遍歷C、D盤,查找已知文件名(接收鍵盤輸入),把其存放位置、時間,記錄到D:\mynote.txt 記錄格式如:
xx年xx月xx日 經查找在C盤、D盤的xx文件狀況以下:
時間 位置
提示:可能用到的DOS命令、變量、參數: echo、set 、set/p 、%date%、%~ >、>>
總結及提示:
for 命令的實際用法基本上已終結,可是僅此是不能寫出強大功能的批處理的,它只是一條DOS命令,須要熟練一些其餘的DOS命令和Windows系統提供的命令,組合運用,才能充分發揮其強大、實用的功能,使得一些復瑣事情,處理起來意想不到的簡潔方便。
DOS for 實例
格式:FOR [參數] %%變量名 IN (相關文件或命令) DO 執行的命令
做用:對一個或一組文件,字符串或命令結果中的每個對象執行特定命令,達到咱們想要的結果。
注意:在批處理文件中使用 FOR 命令時,指定變量請使用 %%variable,而不要用 %variable。變量名稱是區分大小寫的,因此 %i 不一樣於 %I.
關於:for命令能夠帶參數或不帶參數,帶參數時支持如下參數:/d /l /r /f
下面分別解釋一下
===
零:無參數時:
---
FOR %variable IN (set) DO command [command-parameters]
%variable 指定一個單一字母可替換的參數。
(set) 指定一個或一組文件。可使用通配符。
command 指定對每一個文件執行的命令。
command-parameters
爲特定命令指定參數或命令行開關。
TTT示例:
for %%i in (t*.*) do echo %%i --顯示當前目錄下與t*.*相匹配的文件(只顯示文件名,不顯示路徑)
for %%i in (d:\mydocuments\*.doc) do @echo %%i --顯示d:\mydocuments\目錄下與*.doc相匹配的文件
===
1、參數 /d (參數只能顯示當前目錄下的目錄名字)
---
格式:FOR /D %variable IN (set) DO command [command-parameters]
這個參數主要用於目錄搜索,不會搜索文件,/D 參數只能顯示當前目錄下的目錄名字。(TTT特別說明:只會搜索指定目錄下的目錄,不會搜索再下一級的目錄。)
TTT示例:
for /d %%i in (c:\*) do echo %%i --顯示c盤根目錄下的全部目錄
for /d %%i in (???) do echo %%i --顯示當前目錄下名字只有1-3個字母的目錄
===
2、參數 /R (搜索指定路徑及全部子目錄中與set相符合的全部文件)
---
格式:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
此命令會搜索指定路徑及全部子目錄中與set相符合的全部文件,注意是指定路徑及全部子目錄。
一、set中的文件名若是含有通配符(?或*),則列舉/R參數指定的目錄及其下面的所用子目錄中與set相符合的全部文件,無相符文件的目錄則不列舉。
二、若是set中爲具體文件名,不含通配符,則枚舉該目錄樹(即列舉該目錄及其下面的全部子目錄)(並在後面加上具體的文件名),而無論set中的指定文件是否存在。
例:for /r c:\ %%i in (*.exe) do echo %%i --把C盤根目錄,和每一個目錄的子目錄下面所有的EXE文件都列出來了!!!!
TTT示例:
for /r c:\ %%i in (boot.ini) do echo %%i --枚舉了c盤全部目錄
for /r d:\backup %%i in (1) do echo %%i --枚舉d\backup目錄
for /r c:\ %%i in (boot.ini) do if exist %%i echo %%i --很好的搜索命令,列舉boot.ini存在的目錄
===
3、參數 /L (該集表示以增量形式從開始到結束的一個數字序列。可使用負的 Step)
---
格式:FOR /L %variable IN (start,step,end) DO command [command-parameters]
該集表示以增量形式從開始到結束的一個數字序列。可使用負的 Step
TTT示例:
for /l %%i in (1,1,5) do @echo %%i --輸出1 2 3 4 5
for /l %%i in (1,2,10) do @echo %%i --輸出1,3,5,7,9
for /l %%i in (100,-20,1) do @echo %%i --輸出100,80,60,40,20
for /l %%i in (1,1,5) do start cmd --打開5個CMD窗口
for /l %%i in (1,1,5) do md %%i --創建從1~5共5個文件夾
for /l %%i in (1,1,5) do rd /q %%i --刪除從1~5共5個文件夾blog