2012-08-08 4 views
3

다음 코드를 사용하여 시작시 실행되는 프로그램 목록을 가져 와서 파일에 기록합니다.배치 스크립트에서 레지스트리 키 쿼리

for /f "skip=2 tokens=1,2*" %%A in ('REG QUERY "HKCU\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run" 2^>NUL') do echo %%A : %%C >> Log.txt

이 값 이름에 공백이 포함되지 않은 항목이 작동하지만, 이러한 "구글 업데이트"와 같이하면, 그것은이 토큰을 망쳐 놨, 그리고 %% C가된다 : REG_SZ <path> , 대신에 경로.

누구든지 레지스트리를 쿼리하고 값을 기록하는 더 나은 방법이 있습니까?

+0

당신은 무엇을 "usebackq"를 사용하는 경우 옵션으로? http://ss64.com/nt/for_f.htm – npocmaka

+0

그럼 전혀 작동하지 않습니다. 또한 귀하의 링크가 죽었습니다. – Josh

+0

usebackq를 사용하는 경우 대괄호 안에 표현을 "'"(이스케이프 아래의 버튼)으로 묶어야합니다 - 링크 http://ss64.com/nt/for_f.html – npocmaka

답변

1

글쎄 나는 한 가지 해결책을 가지고있다. 나는 여전히 더 좋은 점이 있는지 알고 싶어한다.

for /f "skip=2 tokens=*" %%A in ('REG QUERY "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" 2^>NUL') do (
    set regstr=%%A 
    set regstr=!regstr: =^|! 

    for /f "tokens=1,3 delims= |" %%X in ("!regstr!") do (
     echo %%X : %%Y 
    ) 
) 
0

특정 버전은 XP에서 작동하며 Windows 7에서는 작동하지 않습니다. 자세한 내용은 주석 참조. 출력에

열은 탭 문자 (은 0x09)로 구분하므로 구분 기호로 전용 탭을 사용하고 있습니다 :
for /f "skip=2 tokens=1,2* delims= " %%A
이 잘 때문에 마크 업 흰색 문자를 처리하는 방법으로 표시되지 않지만, 문자 delims=해야 후 실제 일 것임. TAB

+0

Doesn 작동하지 않으면 출력은 4 개의 공백 문자 (Windows 7) – Josh

+0

으로 구분됩니다! 다른 버전의 도구를 사용해야한다는 사실을 알았지 만 새로운 버전에서는 유용성이 떨어지게 될 것이라는 생각을 빨리 해산 시켰습니다. 분명히 잘못된 것입니다. Btw 방금 발견 : Windows 7 스크립트 대 reg.exe의 동작 차이 대 XP 스크립트] (http://social.technet.microsoft.com/Forums/zh/ITCG/thread/62b13853-d39e-4780-8859- c696411da942) - 몇 가지 접근법에 대해 설명합니다. 그 중 하나는 4 칸을 다른 char로 바꾸는 것입니다. 아마도 그 중 일부는 유용 할 것입니다. – wmz

0

여기, WMI는 Win32_StartupCommand 클래스를 호출을 통해 더 나은 방법 스크립트 이름에 따라 같은 폴더에있는 CSV 파일뿐만 아니라 화면에 출력 결과 :

@echo off 
setlocal enabledelayedexpansion 
    cd \ & pushd "%~dp0" 
if exist "%~n0.tmp" (del /f /q "%~n0.tmp") 
if exist "%~n0.csv" (del /f /q "%~n0.csv") 
wmic /namespace:\\root\cimv2 path Win32_StartupCommand get /all /format:csv >"%~n0.tmp" 
for /f "tokens=1,2,3,4,5,6,7,8,9 usebackq delims=, skip=2" %%a in (`type "%~n0.tmp"`) do (
    echo %%b, %%c >>"%~n0.csv" 
    echo %%b, %%c 
) 
if exist "%~n0.tmp" (del /f /q "%~n0.tmp") 
popd & endlocal 
exit /b 0`