2012-10-24 39 views
1

我正試圖刪除我創建的批處理文件中的某些註冊表項。REG在批處理文件中刪除一個包含引號的值嗎?

我發現這裏的下面的代碼,直到它擊中REG刪除它做工不錯

for /F "tokens=1,*" %%a in ('REG QUERY "%KEY%" ^| findstr /I /C:"%VALUE%"') do (REG DELETE %KEY% /v %%a) 

的值位於下[HK_CLASSES_ROOT \安裝\組件\全球]
正如你可能會看到,這裏的大多數值都有引號,例如:

ADODB,fileVersion="7.10.2346.0",version="7.0.3300.00",culture="neutral",publicKeyToken="B03F5F7F11D50A3A" 

這不完全是我想要刪除的,但它非常接近。

因此,如果我回顯%% a它顯示值名稱,因爲它是在引號和一切註冊表中。 但是一旦它通過REG DELETE(現在它要求確認),引號就不存在了,所以如果我點擊是,它會告訴我它找不到密鑰。

很明顯,它不能解析它最初發現的相同的東西。我一直在努力尋找解決方案,但迄今爲止我還沒有找到任何幫助我朝正確方向發展的東西。我知道我可以在vbs中做同樣的事情,但這是一條很長的路線,而在vbs中,做同樣的工作會更長。

任何幫助表示讚賞,如果你需要更多的信息要求離開,我只是開始亂七八糟的批處理文件。我做了這個,因爲我需要給每個我在學校工作時間自動完成所有的依賴關係的安裝過程中爲我校工程(計算機被幻像)

感謝

+0

我發現http://stackoverflow.com/questions/12822801/registry-value-with-quotes[/link]我沒有在之前絆倒他們建議逃逸引號,我要去看看它以編程方式進行並更新我的答案。 – Rayfloyd

+0

是的 - 我剛剛測試過,並且引號必須轉義爲'\「' – dbenham

+0

我有這個到目前爲止對於/ F」tokens = 1,*「%% a in('REG QUERY」%KEY%「^ | FINDSTR/I/C: 「%VALUE%」')做( 集合b = %%一個 集b =%b: 「= \」 % 回聲REG DELETE%KEY%/ v%的b% )'但似乎b總是空的,我認爲我做錯了一些事情,我現在正在努力解決這個問題 – Rayfloyd

回答

3

注 - 您沒有必要的,因爲"tokens=1,*"你只使用第一個標記。但它不會導致問題

正如您在您的評論中發現並聲明的,引號必須轉義爲\"。您可以使用環境變量搜索和替換以編程方式轉義引號。由於您必須在代碼塊中設置並擴展變量,因此您必須使用延遲擴展。這是因爲正常的擴展發生在線被解析時,並且整個塊被立即解析,因此正常的擴展將產生在循環執行之前存在的值!執行該行時會發生延遲擴展。

@echo off 
setlocal enableDelayedExpansion 

::some additional code to setup KEY and VALUE 

for /F %%A in ('REG QUERY "%KEY%" ^| findstr /I /C:"%VALUE%"') do (
    set val=%%A 
    REG DELETE "%KEY%" /v !val:"=\"! 
) 

我不知道是否有可能有!的價值,但如果是,那麼你必須打開和關閉內環路延遲擴展。否則當%% A包含!時,其擴展將被破壞。

@echo off 
setlocal disableDelayedExpansion 

::some additional code to setup KEY and VALUE 

for /F %%A in ('REG QUERY "%KEY%" ^| findstr /I /C:"%VALUE%"') do (
    set val=%%A 
    setlocal enableDelayedExpansion 
    REG DELETE "%KEY%" /v !val:"=\"! 
    endlocal 
) 
+0

第一個做了訣竅:)。我早些時候'setlocal enableDelayedExpansion',但我似乎沒有發現任何使用我刪除它哈哈。我現在就去閱讀。再次感謝幫助。 – Rayfloyd

+1

@Rayfloyd - 命令行中的'HELP SET'給出了延遲擴展的一個體面的解釋。 – dbenham

+0

我現在明白了,謝謝:) – Rayfloyd

相關問題