2017-01-05 1 views
1

jeb이 만든 배치 파일을보고있었습니다. [HERE] 누군가 나에게 어떤 것을 설명 할 수 있습니까?누군가이 배치 파일을 설명 할 수 있습니까?

처럼, 어떤 함수가

for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do 

그리고 set "param=^%~2" !set "param=!param:"=\"!"findstr /p /A:%1 "." "!param!\..\X" nul 무엇을 의미합니까?

전체 코드 : 사전에 모든 사람에게

@echo off 
setlocal EnableDelayedExpansion 
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
    set "DEL=%%a" 
) 

rem Prepare a file "X" with only one dot 
<nul > X set /p ".=." 

call :color 07 "Premi un" 
call :color 0a " tasto " 
call :color 07 "per continuare..." 
pause 

:color 
set "param=^%~2" ! 
set "param=!param:"=\"!" 
findstr /p /A:%1 "." "!param!\..\X" nul 
<nul set /p ".=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%" 
exit /b 

감사합니다.

+2

프롬프트 명령을 사용하여 백 스페이스 문자를 변수로 설정하는 해킹 기술입니다. – npocmaka

답변

2
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
     set "DEL=%%a" 
    ) 

하나씩.

  1. 명령의 경우 (/f 스위치 사용) 다른 명령의 출력을 구문 분석합니다. 이 경우에는 (prompt /?을 확인)을 묻도록 제 (#로 구분) 제
  2. prompt #$H#$E# 세트 탈출 # 결과로 분할 문자열 및 백 스페이스 문자를 받아 echo on는 볼 수있다.
  3. for %%b in (1) do rem 더 많은 정보가 표시되지 않지만 프롬프트가 인쇄되므로 처리 할 수 ​​있습니다.
  4. 모든 것이 큰 따옴표로 묶여 있으므로 &은 필요하지 않습니다.
  5. 결과로 외부 FOR 명령은 문자열을 처리합니다. #backspace#escape#
  6. 마지막 백 스페이스는 del 변수에 할당됩니다.

나머지는 채색에 사용되는 서브 루틴입니다.

rogue exclamation이라는 간단한 기술을 사용하여 특수 문자가 포함 된 문자열을 안전하게 할당합니다.

두 번째 줄에서는 "\"으로 바꿉니다. findstr에 필요한 따옴표를 이스케이프 처리합니다.

라인 <nul > X set /p ".=."X 파일을 단일 점으로 끝점 문자없이 만듭니다 (here 참조).이 파일은 나중에 FINDSTR 명령으로 검색합니다.

다음은 착색입니다. 예를 들어 findstr /p /A:05 "." "something\..\X" nul을 시도하십시오. 상대 경로 (이 경우 이미 생성 된 X)가있는 파일에서 점을 검색하고 파일의 경로를 색칠합니다.

<nul set /p ".=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%". 마지막으로 이것이 사용됩니다. 텍스트를 채색하는 findstr 행에서 필요하지 않은 데이터를 삭제하므로 백 스페이스 문자를 다시 인쇄합니다 (새 행을 사용하지 않고 다시).findstr의 좋은 점은 (읽기 위해 너무 어렵다 왜 색상 (color 명령과 달리) 독립적으로 '글로벌'콘솔 색상의 텍스트이 거의 각 라인에 비 문서화 된 해킹을 사용 결론적으로

, 즉 있다고 Jeb입니다 배치 스크립팅의 반 범례 - 여기에있는 트릭의 대부분은 그의 발명품입니다.

+0

"rogue exclamation": -/??? 절대 들어 본 적이 없으며 Google은 도움을주지 않았습니다. 링크 컨텐트와 용어를 관련 짓는 것은 도움이되지 못했습니다. 문제가 아닌 두 개의 문자로 인코딩하여 문제를 보호하는 방법을 보여주는 링크를 생각해보십시오. – dbenham

+0

@dbenham - 사실 [당신이 그렇게 부른] (http://ss64.org/viewtopic.php?pid=6127#p6127) 그리고 여기에서 나는 링크를 가져 왔습니다. 그것은 꽤 인상적인 기술이었다 :) – npocmaka

+0

아, 그 하나 기억 해요. 나는이 기법을 "단순"이라고 부르지 않을 것입니다. 그리고 나는 그 용어를 "외로운"에 대한 당신의 질문에 대해서만 사용했습니다! ". 그 작은 해킹은 훨씬 더 큰 해킹의 한 구성 요소입니다. – dbenham

관련 문제