@prompt $s
@color 1f
@cd /d %~dp0
@title Windows 10 에서 바탕화면 JPG 화질 100 퍼센트로 설정 또는 원상복구하기
@mode con cols=170 lines=30
@setlocal enabledelayedexpansion

@for /f "tokens=3 delims=.]" %%a in ('ver') do set build=%%a

@if %build% LSS 10240  (
@echo.
@echo.
@echo.===============================================
@echo. Windows 10 에 적용됩니다
@echo.===============================================
@echo.     
@pause
@exit
)

@echo 관리자권한 확인용 >%windir%\admin.confirm || @(
echo Set UAC = CreateObject^("Shell.Application"^) > "%tmp%\admin.vbs"
echo UAC.ShellExecute "%~0", "", "", "runas", 1 >> "%tmp%\admin.vbs"
"%tmp%\admin.vbs" & del "%tmp%\admin.vbs" & exit)
@del %windir%\admin.confirm

reg query "HKEY_CURRENT_USER\Control Panel\Desktop" /v "JPEGImportQuality" | find /i "REG_DWORD" | find /i "0x64" && goto :restore

reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v "JPEGImportQuality" /t "REG_DWORD" /d 100 /f

@echo.
@echo.
@echo.=============================================================
@echo. 레지스트리를 적용했습니다. 재부팅 하셔야 적용됩니다
@echo.=============================================================
@echo.     
@pause
@exit

:restore

reg delete "HKEY_CURRENT_USER\Control Panel\Desktop" /v "JPEGImportQuality" /f

@echo.
@echo.
@echo.=============================================================
@echo. 적용했던 레지스트리를 삭제하여 원상 복구했습니다.
@echo.=============================================================
@echo.     
@pause
@exit













for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do @set drv=%%a& call :del

for /f "tokens=3* delims=\ " %%a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" ^| find /i "Desktop"') do set 사용자경로=%%a\%%b
set 사용자경로=%사용자경로:~0,-8%
:2017-12-29 사용자 폴더 다른 곳으로 변경하는걸 감안하여 수정함

for /f "tokens=*" %%a in ('dir /a:d/b "%사용자경로%\Favorites\링크\"') do (
@set k=0
for /f %%b in ('dir /a-d /b "%사용자경로%\Favorites\링크\%%a\" 2^>nul') do @set /a k+=1
if !k!==0 (rd "%사용자경로%\Favorites\링크\%%a") else (dir /a/s "%사용자경로%\Favorites\링크\%%a\"& echo.& rd /s "%사용자경로%\Favorites\링크\%%a")
)

@echo.
@echo. =====================================================================================================================================================================================================
@echo.
@echo. 2017-11-16 윈도10 레드스톤3 버전1709 에서 자꾸 즐겨찾기 링크에 바로가기와 같은 이름의 폴더들이 생겨서 삭제한다
@echo. 2015-12-08 다음 구문은 필요없을 듯 하여 삭제함 if exist %%a:\$RECYCLE.BIN for /f "tokens=* usebackq" %%b in (`"dir /b /a /s  %%a:\$RECYCLE.BIN\"`) do del /f/a/q "%%~b"
@echo. 2015-05-27 휴지통 폴더 자체를 삭제하는 것이 맘에 들지 않아서...하위폴더 삭제하는 방식으로 바꿈
@echo. 2017-12-16 내용은 같고, 단지 `" 이런 형식을 '으로 단순화 했다. C D E 같은 것도 소문자에서 대문자로 변경했다. %%~b 에서 %%b 으로 간단하게 했다. 그냥 모양 문제다
@echo. 2017-12-29 사용자 폴더 다른 곳으로 변경하는걸 감안하여 수정함. 모든 드라이브 휴지통 정리하기4.bat 와 같다 [의문 해소: dir /a:dsh 에서 옵션이 많아서, 단순히 숨김폴더도 검색될까봐 걱정했는데 테스트결과 전부 적용되는 것[시스템이면서 숨김폴더]만 검색된다]
@echo. 2018-01-09 링크에 폴더가 자동으로 생기는 문제 보완함. rd /q/s는 혹시 하는 위험성 때문에 ...그리고 if exist 중에서도 폴더 내부의 파일 유무 확인이 요즘 이상하게 안 되더라. 윈도 버그인가? 암튼 그래서 dir로 파일 확인한다. 근데 왜 rd /s 명령이 안에 파일이 없어도 질문하냐? 지랄
@echo.
@pause
@exit

:del
if exist %drv%:\$RECYCLE.BIN\* for /f "tokens=*" %%a in ('dir /a:dsh /b %drv%:\$RECYCLE.BIN\') do RD /S /Q "%drv%:\$RECYCLE.BIN\%%a"
if exist %drv%:\RECYCLER\* for /f "tokens=*" %%a in ('dir /a:dsh /b %drv%:\RECYCLER\') do RD /S /Q "%drv%:\RECYCLER\%%a"
@echo.
@exit /b

:----------------------------------------------------------
2016-09-03 탐색기 오류가 생기는지 의심이 되어서 System Volume Information 삭제하는건 뺐다.

for %%a in (c d e f g h i j k L m n o p q r s t u v w x y z) do (
if exist %%a:\$RECYCLE.BIN\ for /f "tokens=* usebackq" %%b in (`"dir /a:d/b %%a:\$RECYCLE.BIN\"`) do rd /q/s "%%a:\$RECYCLE.BIN\%%~b"
if exist %%a:\RECYCLER\ for /f "tokens=* usebackq" %%b in (`"dir /a:d/b %%a:\RECYCLER\"`) do rd /q/s "%%a:\RECYCLER\%%~b"
if exist "%%a:\System Volume Information\" (
takeown /f "%%a:\System Volume Information" /r /d y 
icacls "%%a:\System Volume Information" /grant administrators:F /t 
rd /q/s "%%a:\System Volume Information"
)
)


:-----------------------------------------------------------------------------------------------------------------

:: 관리자권한 확인하여, 아니면 관리자권한으로 다시 실행함
@if not exist %windir%\system32\config\sam (
echo Set UAC = CreateObject^("Shell.Application"^) > "%tmp%\admin.vbs"
echo UAC.ShellExecute "%~0", "", "", "runas", 1 >> "%tmp%\admin.vbs"
wscript.exe "%tmp%\admin.vbs" & del "%tmp%\admin.vbs" & exit)

@echo 관리자권한 확인용 >%windir%\admin.confirm || @(
echo Set UAC = CreateObject^("Shell.Application"^) > "%tmp%\admin.vbs"
echo UAC.ShellExecute "%~0", "", "", "runas", 1 >> "%tmp%\admin.vbs"
wscript.exe "%tmp%\admin.vbs" & del "%tmp%\admin.vbs" & exit)
@del %windir%\admin.confirm

-----------------------------------------------------------------------

이전에 사용하던 명령어...

md 빈폴더
attrib +h 빈폴더

if exist %%a:\RECYCLER rd /q/s %%a:\RECYCLER 
if exist %%a:\RECYCLER rd /q/s %%a:\RECYCLER 
if exist %%a:\$RECYCLE.BIN rd /q/s %%a:\$RECYCLE.BIN   
if exist %%a:\$RECYCLE.BIN rd /q/s %%a:\$RECYCLE.BIN   
if exist %%a:\RECYCLER robocopy /mir /r:0 /zb  빈폴더 %%a:\RECYCLER
if exist %%a:\$RECYCLE.BIN robocopy /mir /r:0 /zb  빈폴더 %%a:\$RECYCLE.BIN

rd 빈폴더

:-----------------------------------------------------------------------------------


@for /f "tokens=1-3 delims=:." %%a in ("%time%") do @(
 set h=%%a
 set m=%%b
 set s=%%c
 if "!h:~0,1!" == "0" set h=!h:~-1!
 if "!m:~0,1!" == "0" set m=!m:~-1!
 if "!s:~0,1!" == "0" set s=!s:~-1!
 set /a time1=!h!*3600+!m!*60+!s!
)







@for /f "tokens=1-3 delims=:." %%a in ("%time%") do @(
 set h=%%a
 set m=%%b
 set s=%%c
 if "!h:~0,1!" == "0" set h=!h:~-1!
 if "!m:~0,1!" == "0" set m=!m:~-1!
 if "!s:~0,1!" == "0" set s=!s:~-1!
 set /a time2=!h!*3600+!m!*60+!s!
)

@if %time2% GEQ %time1% set /a elapsed=%time2%-%time1%
@if not %time2% GEQ %time1% set /a elapsed=86400-(%time1%-%time2%)

@set /a h=elapsed/3600, rest=elapsed%%3600, m=rest/60, s=rest%%60

@if %h%==0 goto m
@if not %h%==0 goto h

:m

@>"%tmp%\msg.vbs" echo Msgbox "인코딩 작업을 완료했습니다. %m%분 %s%초",  vbSystemModal, "알림창"
@start /d "%tmp%\" msg.vbs
@timeout /t 2 >nul
@start /d "%tmp%\" msg.vbs

@echo.
@echo.   작업시간: %m%분 %s%초

@goto finish

:h

@>"%tmp%\msg.vbs" echo Msgbox "인코딩 작업을 완료했습니다. %h%시 %m%분",  vbSystemModal, "알림창"
@start /d "%tmp%\" msg.vbs
@timeout /t 2 >nul
@start /d "%tmp%\" msg.vbs

@echo.
@echo.   작업시간: %h%시 %m%분

:finish

@echo.
@echo.        인코딩이 완료되었습니다
@echo.
@pause
@exit

:----------------------------------------------------------------------------------------------------------------------

@for /f "tokens=4,5 usebackq delims=. " %%a in (`"ver"`) do @set ver1=%%a& set ver2=%%b

@if /i %ver1%%ver2% LEQ 61 (echo. & echo. & echo.     Windows 8 부터 적용됩니다   & echo. & pause & exit)
숫자 비교 잘 적용되더라. 100 처럼 갯수가 달라도..

---------------------------------------------------------------------------------------

@if not exist "%tmp%\_.k" (echo 확인용 >"%tmp%\_.k"
if exist "%tmp%\_.vbs" del /f/a/q "%tmp%\_.vbs"
echo Set WSHShell = WScript.CreateObject^("WScript.Shell"^) > "%tmp%\_.vbs"
echo WSHShell.run "%~0",3,True >> "%tmp%\_.vbs"
start /d "%tmp%\" wscript  _.vbs & exit)
@del /f/a/q "%tmp%\_.k"


@if not exist "%tmp%\_.k" (echo 확인용 >"%tmp%\_.k"
if exist "%tmp%\_.vbs" del /f/a/q "%tmp%\_.vbs"
echo Set WSHShell = WScript.CreateObject^("WScript.Shell"^) > "%tmp%\_.vbs"
echo WSHShell.run "%~0",3,True >> "%tmp%\_.vbs"
wscript  _.vbs & exit)
@del /f/a/q "%tmp%\_.k"
:: PE에서는 또 exit 때문에 재부팅 되어 버리네...그래서 start /d 생략했다

@if not exist "%tmp%\_.k" (echo 파일확인>"%tmp%\_.k"
if exist "%tmp%\_.vbs" del /f/a/q "%tmp%\_.vbs"
echo Set UAC = CreateObject^("Shell.Application"^) > "%tmp%\_.vbs"
echo UAC.ShellExecute "%~0", "", "", "runas", 3  >> "%tmp%\_.vbs"
start /d "%tmp%\" wscript  _.vbs & exit)
@del /f/a/q "%tmp%\_.k"




>diskpart1 echo create vdisk file="Q:\2.vhd" maximum=40000 type=fixed
>>diskpart1 echo attach vdisk
>>diskpart1 echo clean
>>diskpart1 echo convert mbr
>>diskpart1 echo create partition primary 
>>diskpart1 echo format fs=ntfs quick  label="윈10IP다운로드-홈x64" OVERRIDE
>>diskpart1 echo ass
>>diskpart1 echo act
diskpart /s diskpart1 
del diskpart1

-----------------------------------------------------------------------------------------------

@if exist "%tmp%\msg.vbs" del /f/a/q "%tmp%\msg.vbs"
@>>"%tmp%\msg.vbs" echo.Msgbox "Robocopy 실행합니다",  vbSystemModal, "알림창"
@wscript "%tmp%\msg.vbs"
@del /f/a/q "%tmp%\msg.vbs"

@if exist "%tmp%\msg.vbs" del /f/a/q "%tmp%\msg.vbs"
@>>"%tmp%\msg.vbs" echo.set WshShell = WScript.CreateObject^("WScript.Shell"^)
@>>"%tmp%\msg.vbs" echo.WshShell.AppActivate "vhd 작업"
@wscript "%tmp%\msg.vbs"
@del /f/a/q "%tmp%\msg.vbs"

@timeout /t 2 /nobreak


@echo.
@echo.
@echo.  === Robocopy 실행합니다 ===
@echo.
@pause


--------------------------------------
2015-11-20 23:12

@if exist "%windir%\Temp\msg.vbs" del /f/a/q "%windir%\Temp\msg.vbs"
@>"%windir%\Temp\msg.vbs" echo.Msgbox "완료했습니다",  vbSystemModal, "알림창"
@start wscript "%windir%\Temp\msg.vbs"

-------------------------
2016-01-04 05:14

set /a k+=1

---------------------------------
2016-01-18 윈7 통합하는데 dism으로 이미지 정보를 지금까지 해왔는데...왜 아무 말도 하지 않지? 몇달째인데...그것참...

@set k=0
@if exist "%tmp%\list.txt" del /q "%tmp%\list.txt"
@for /f "tokens=3 usebackq delims=<>" %%a in (`"imagex.exe /info install.wim | findstr /i "^</name^>""`) do @(
	set /a k+=1
	echo		!k!^|%%a>> "%tmp%\list.txt"
)

--------------------------------
2016-02-09 12:58 경고소리까지 나오는 알림창

@if exist "%tmp%\msg.vbs" del /f/a/q "%tmp%\msg.vbs"
@>"%tmp%\msg.vbs" echo.Msgbox "완료했습니다",  vbSystemModal+ vbInformation, "알림창"
@start wscript "%tmp%\msg.vbs"

-----------------------------
2016-02-19 00:12

@prompt $s
@color 1f
@cd /d %~dp0
@title 부팅 때 컴퓨터 시간동기화 하기
@mode con cols=200 lines=1000
@setlocal enabledelayedexpansion

@echo 관리자권한 확인용 >%windir%\admin.confirm || @(
echo Set UAC = CreateObject^("Shell.Application"^) > "%tmp%\admin.vbs"
echo UAC.ShellExecute "%~0", "", "", "runas", 1 >> "%tmp%\admin.vbs"
wscript.exe "%tmp%\admin.vbs" & del "%tmp%\admin.vbs" & exit)
@del %windir%\admin.confirm

@echo.
@echo.
@echo.  === 모든 작업을 완료했습니다 ===
@echo.
@pause
@exit

--------------------------------------------------------------
2016-03-04 17:54

@if exist "%tmp%\msg.vbs" del /f/a/q "%tmp%\msg.vbs"
@>>"%tmp%\msg.vbs" echo.k=0
@>>"%tmp%\msg.vbs" echo.call Main
@>>"%tmp%\msg.vbs" echo.Sub Main
@>>"%tmp%\msg.vbs" echo.msg = MsgBox^("ESD 완료 - %time_msg% - 확인을'클릭'하세요", vbOkCancel+vbDefaultButton2+ vbSystemModal, "알림창"^)
@>>"%tmp%\msg.vbs" echo.If msg = vbYes Then
@>>"%tmp%\msg.vbs" echo.WScript.Quit
@>>"%tmp%\msg.vbs" echo.ElseIf msg = vbCancel Then
@>>"%tmp%\msg.vbs" echo.k=k+1
@>>"%tmp%\msg.vbs" echo.If k=3 Then
@>>"%tmp%\msg.vbs" echo.WScript.Quit
@>>"%tmp%\msg.vbs" echo.ElseIf k^<3 Then
@>>"%tmp%\msg.vbs" echo.WScript.Sleep 1000
@>>"%tmp%\msg.vbs" echo.call Main
@>>"%tmp%\msg.vbs" echo.End If
@>>"%tmp%\msg.vbs" echo.End If
@>>"%tmp%\msg.vbs" echo.End Sub

@wscript.exe "%tmp%\msg.vbs"
@del /f/a/q "%tmp%\msg.vbs"


-------------------------------------------
2017-12-06 
build 확인하기,  ver 명령으로 간단하고 확실하게...먼저 띄어 쓰기 포함하여 해봤는데...XP가 골통처럼...규칙성에 어긋났다. 그래서 띄어쓰기를 빼고 했다. 어차피 빌드만 확인하는 거니까 다른 버전들은 관계없다

@for /f "tokens=3 delims=.]" %%a in ('ver') do @set build=%%a

-----------------
2017-12-14 ' ' 이런 괄호들에 대한 고찰..' 작은 따옴표는 명령어로 인식한다. usebackq를 사용하지 않아도 되는 대신에 | 이런 것이 명령어 중에 있으면 ^| 식으로 skip 스킵해줘야 한다. 이런 점 때문에 그동안 `"      "` 으로 감싸줬는데...문제 없었지...그런데...아주 가끔이지만
내부 명령어에 " "으로 다시 감싸줄 경우에 에러가 발생했다. 그래서 조금 불편하지만..^| 을 하기로 했다. 참고로 외국 bat 파일 만드는 고수들도 이렇게 하더라..그러니까 안심하고 하면 된다

for /f "tokens=*" %%a in ("%Date%") do set date=%%a

이건 시간 bat 파일에서 발견한 것인데 " " 큰 따옴표로 하면 굳이 명령어로 'echo.%date%' 하지 않아도 그대로 나오더라.." " 사용하지 않으면 저런 이름을 가진 파일을 찾는다. 이런 것은 별도로 연구하지 않아서..아직 모르는게 많다. 굳이 연구하고 싶지는 않다. 그때 그때 필요할 때 ..

--------------------
2017-12-22 
레지스트리 키 찾는 방법: \ 기준으로 찾는데, \ 갯수보다 2개 많게 하면 맞다. \ 갯수보다 1개 많은 상태이고, 그 다음에 검색되는 것이니까..2개가 많게 된다. 그래서 다음 예시에는 6개의 \ 가 있어서 tokens는 8개가 된다. 그 다음 레지스트리에서는 3번째 토큰이 데이터로 나온다

@set DhcpNameServer=못 찾음
@for /f "tokens=8 delims=\" %%a in ('reg query HKLM\System\ControlSet001\Services\Tcpip\Parameters\Interfaces  /s /f { /k') do @for /f "tokens=3" %%b in ('reg query HKLM\System\ControlSet001\Services\Tcpip\Parameters\Interfaces\%%a /v DhcpNameServer 2^>nul') do @set DhcpNameServer=%%b& goto next

:next

------------------
2017-12-30 번호 선택하는 것도 찾기 힘드네..그래서 추가했다

@echo.
:sel
@echo.          
@echo.             1. 부팅 때 디스크 검사 '건너뛰기' [현재 레지스트리 백업합니다]
@echo.
@echo.             2. 백업한 레지스트리 복구하기
@echo.
@set sel=
@set /p sel=선택하세요 : 

@if not "%sel%"=="1" if not "%sel%"=="2" goto sel

@if not %sel%==1 goto 2

-----------------------------
2018-01-06

for /f "tokens=3 delims=.]" %%a in ('ver') do set build=%%a

@if %build% LSS 10240  (
@echo.
@echo.
@echo.                 ===============================================
@echo.                    Windows 10 에 적용됩니다
@echo.                 ===============================================
@echo.     
@pause
@exit
)

------------------------------------
2018-01-11

@if not exist "%tmp%\_.k"  (
@echo.
@echo.
@echo.                 ===============================================
@echo.                    Windows 10 에 적용됩니다
@echo.                 ===============================================
@echo.     
@pause
@exit
)

------------------------------------
2018-07-05 선택할 때 앞부분에 띄어쓰기...아스키 제어 문자로 BS [백스페이스] 넣고 - notepad++ 에서는 alt+숫자 백스페이스가 십진수로 8 이라서 alt+8 입력하면 된다는데....난 안 되더라..뭐지?암튼 그래서 윈도우포럼, 질문의 댓글에 efny 회원이 올려준 cmd 파일 복사해놨다. 잘 작동한다
. 하면 뒤에 한번만 빈칸이 있으면 된다. 앞에는 점이 아니라 어떤 문자도 관계없다. 그러니까 앞에 문자를 지우는 역할을 한다. 앞에 뭔가 입력이 되어 있어야 뒤에 띄어쓰기가 먹히기 때문에...이런 방식으로 제어 문자를 입력해두는 것이다.  만 하면 2번 띄어쓰기 해야 한다.
포터블이라서 안 되는건가? 뭐지? 겨우 이거 하나 하려고 notepad++ 설치하기도 그렇고 그냥 넘어가자..

@echo.
:sel
@echo.          
@echo.             1. 부팅 때 디스크 검사 '건너뛰기' [현재 레지스트리 백업합니다]
@echo.
@echo.             2. 백업한 레지스트리 복구하기
@echo.
@set sel=
@set /p sel=  선택하세요: 

pause
exit

------------------------------------
2018-07-07 토요일, 선택 하세요. 이런 구문 때문에 중간쯤에 하는 경우가 있는데...그거 외에는 중간 쯤에 하는 것이 이상하기 때문에...[계속 하려면 아무 키나 누르시오. 이 문구와 언밸런스] 앞부분에 하는 경우가 많아졌다. 그래서 추가했다.

@if %build% LSS 10240  (
@echo.
@echo.
@echo.===============================================
@echo. Windows 10 에 적용됩니다
@echo.===============================================
@echo.     
@pause
@exit
)

------------------------------------
2018-07-07 토요일, 선택 구문을 왜 위에서는 저렇게 했는지...흠 기억도 안 난다. 그냥 그게 아니면 선택되지 않도록 했나보다

:sel
@echo.
@echo.          
@echo.             1. Copy to Directory
@echo.
@echo.             2. Open Folder
@echo.
@set sel=
@set /p sel=  선택하세요 : 

@if "%sel%"=="1" goto :1
@if "%sel%"=="2" goto :2
@cls
@goto sel

:1

-----------------------------------------------------
2018-07-13 금요일, 번호 선택하는 방법...이것이 은근히 어려운데..그동안 문자열 첫 행을 지정하는 findstr 정규식 등을 사용해봐도 먹히지도 않고...하여튼 ms 개세키들...이번에도 그 방법은 실패했는데...굳이 그 방법이 아니라도 정확하게 할 수 있는 방법이 생각났다. 알고 보면 간단해...허무하다
tokens를 이용하면 된다. 어차피 tokens가 구분용으로 하는 방법이니까...구체적으로는 아래 방법 보면 금방 알 것이다. 그 밑에는 더 먼저 발건한 것인데..무대포씩으로 txt 파일에 앞부분에 얼마나 띄어쓰기가 된 것인지 확인하여 그대로 띄어쓰기하여 찾는 방법이다. txt 파일로 해야 정확하다
하지만 이 방법은 가능성이야 극히 적겠지만...저렇게 일부러 괴상하게 파일 이름을 해놓고는 안 되는데요. 이 지랄하는 세키들도 있으니까 [윈도우포럼의 메리아 같은 거지 세키]

@if exist "%tmp%\list.txt" del /q "%tmp%\list.txt"

@set  k=0
@for /f "tokens=*" %%a in ('dir /a:d /b dism*')  do  @(
	set /a k+=1
	echo             !k!. %%a>> "%tmp%\list.txt"
)

@type "%tmp%\list.txt"

:choice

set choice=%k%
@set /p choice=입력하세요: 

@set dism=
@for /f "tokens=1*" %%a in ('findstr /c:" %choice%. " "%tmp%\list.txt"')  do @if "%%a"=="%choice%." set dism=%%b\dism

@if "%dism%"=="" goto :choice


for /f "tokens=1*" %%a in ('findstr /c:"            %choice%. " "%tmp%\list.txt"')  do set dism=%%b\dism




