반응형

build.bat

@echo off
setlocal
echo DiskFilter Driver Build Script
echo =============================

call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" 2>nul
if %ERRORLEVEL% NEQ 0 (
    call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" 2>nul
    if %ERRORLEVEL% NEQ 0 (
        call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat" 2>nul
        if %ERRORLEVEL% NEQ 0 (
            echo Error: Visual Studio not found. Please install Visual Studio or run from Developer Command Prompt.
            exit /b 1
        )
    )
)

set WDKPATH=C:\Program Files (x86)\Windows Kits\10

REM Check if we're in WDK environment
if not defined WDKPATH (
    echo Error: WDK environment not detected.
    echo Please run this script from WDK Developer Command Prompt.
    echo.
    echo To open WDK Developer Command Prompt:
    echo 1. Start Menu -> Windows Driver Kit -> WDK x64 x86 Cross-Tools Command Prompt
    echo 2. Navigate to this directory
    echo 3. Run this script again
    pause
    exit /b 1
)

echo WDK environment detected: %WDKPATH%
echo.

REM Clean previous build
echo Cleaning previous build...
del *.obj *.sys *.pdb *.ilk 2>nul

REM Compile
echo Compiling diskfilter.c...
cl /c /I"%WDKPATH%\Include\10.0.26100.0\km" /I"%WDKPATH%\Include\10.0.26100.0\shared" ^
 /I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\km\crt" ^
 /I"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include" ^
 /DDRIVER /DWIN32 /D_WIN32 /DNT /DNTDDI_VERSION=NTDDI_WIN10 /DWINVER=0x0A00 ^
 /D_WIN32_WINNT=0x0A00 /DUNICODE /D_UNICODE /DNDEBUG /Zi /Od /W3 /WX- /GS /Gy ^
 /Zc:wchar_t /Zc:forScope /Zc:inline /fp:precise /errorReport:prompt /kernel /D_AMD64_ /GS- diskfilter.c

if %errorLevel% neq 0 (
    echo Compilation failed!
    pause
    exit /b 1
)

REM Link
echo Linking diskfilter.sys...
link /DRIVER /SUBSYSTEM:NATIVE /ENTRY:DriverEntry ^
/NODEFAULTLIB /INCREMENTAL:NO /NOLOGO /DEBUG /PDB:diskfilter.pdb ^
/SUBSYSTEM:NATIVE /DRIVER:WDM /MACHINE:X64 /IGNORE:4099 /IGNORE:4210 /IGNORE:4049 /IGNORE:4103 /IGNORE:4098 ^
/LIBPATH:"%WDKPATH%\Lib\10.0.26100.0\km\x64" ^
/OUT:diskfilter.sys diskfilter.obj ntoskrnl.lib hal.lib bufferoverflowk.lib

if %errorLevel% neq 0 (
    echo Linking failed!
    pause
    exit /b 1
)

REM Check if build was successful
if exist diskfilter.sys (
    echo.
    echo Build completed successfully!
    echo Generated: diskfilter.sys
    echo.
    echo To install the driver, run: install.bat
    echo To test the driver, run: test.bat
) else (
    echo Build failed - diskfilter.sys not found!
)

echo.
echo Test completed.
endlocal
pause

 

 

 

반응형

윈도우에서 UTF-8 with BOM 파일을 찾아 모두   UTF-8 without BOM 형식으로 변환하기.

아래에서 첫 번째에 최상위 경로를 주고 powershell에서 실행하면 일괄로 변경한다. 

 

$targetFolder = "data"  # 변환할 최상위 폴더 경로

# UTF-8 BOM 3바이트 시퀀스
$utf8BOM = [byte[]](0xEF,0xBB,0xBF)

# 대상 폴더 내 모든 파일 재귀 탐색
Get-ChildItem -Path $targetFolder -File -Recurse | ForEach-Object {
    $file = $_.FullName

    # 파일을 바이트 단위로 읽기
    $bytes = [System.IO.File]::ReadAllBytes($file)

    # BOM 존재 여부 체크
    if ($bytes.Length -ge 3 -and $bytes[0] -eq $utf8BOM[0] -and $bytes[1] -eq $utf8BOM[1] -and $bytes[2] -eq $utf8BOM[2]) {
        Write-Host "BOM 발견 및 제거 중: $file"

        # BOM 제거한 바이트 배열 생성
        $bytesWithoutBOM = $bytes[3..($bytes.Length - 1)]

        # BOM 제거된 바이트를 임시 파일에 기록
        $tempFile = [System.IO.Path]::GetTempFileName()
        [System.IO.File]::WriteAllBytes($tempFile, $bytesWithoutBOM)

        # 임시 파일을 원본 파일로 덮어쓰기
        Move-Item -Path $tempFile -Destination $file -Force
    }
    else {
        Write-Host "BOM 없음: $file"
    }
}

 

이 시스템에서 스크립트를 실행할 수 없으므로 ~~~파일을 로드할 수 없습니다. 라고 에러가 나면.

관리자 모드 powershell에서

Set-ExecutionPolicy RemoteSigned

 

 

반응형

윈도우 cmd 창에서 폴더(디렉터리) 복사를 하려고 할 때 막상 해보면 잘 되지 않는다...

리눅스 처럼 간단하게 cp -rf 같은 게 있으면 될 텐데, 이러저리 해봐도 쉽지 않았다.

팁!

xcopy /hickey [소스] [목적지]

xcopy의 옵션이 워낙 많아서 읽어보려면 시간이 많이 걸린다. 

한 번 정리해본 결과. 최종 옵션은 hickey 다.

hickey ;  어떻게 쉽게 외울까 하다가 옵션 순서를 영어 단어가 있는 것으로 배열해 봤다.

히키로 외우자. (영어 단어 뜻은 여드름. 흠집. 키스마크.^^ 이다.)

옵션 정리

a ; 보관특성만 복사. 보관특성 유지
m ; 상동. 단, 보관특성 삭제.
d:m-d-y ; 지정날짜 이후 수정파일만 복사. 미지정시, 대상 파일보다 최신인 것만 복사.
p ; 사용자에게 물어보기. 
s ; sub 포함. 단, empty dir 제외.
e ; sub 포함. 단, empty dir 포함.
q ; 조용히
c ; 에러무시하고 진행
h ; hidden 포함
l ; 파일 목록 표시 list
t ; tree 구조만 복사.
u ; update
k ; 특성도 복사
o ; 파일소유권 owner 복사
y ; overwrite할때 묻지 않음. yes
i ; directory 자동인식

 

 

 

반응형
port

windows port

로컬에서 쓸데없이 리스닝하는 포트를 찾아 프로세스 종료시키기

netstat 옵션

-a ; 모든 상태 표시.
-n ; 번호로 표시. (hostname, 서비스명 대신 다 숫자로…)
-o ; owner process ID
-r ; 라이팅 테이블

리스닝 포트 확인

netstat -an | findstr "LISTEN"

image

port 누가 쓰지?? PID를 먼저 찾는다.

netstat -ano | grep "포트번호"
netstat -ano | findstr /i "검색어"

findstr.exe 는 옵션 /i=caseinsensitive. /v=inverse.

C:\WINDOWS\system32>netstat -ano | findstr 8080
  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       1236
  TCP    [::]:8080              [::]:0                 LISTENING       1236
  UDP    0.0.0.0:8080           *:*                                    1236
  UDP    [::]:8080              *:*                                    1236

8080 포트를 1236 PID가 쓰고 있음을 알 수 있다.

PID 로 프로세스 확인

C:\>tasklist -fi "pid eq 1236"

이미지 이름      PID       세션 이름     세션#  메모리 사용
======================== ======== =============== =========== 
svchost.exe    1236       Services       0        17,080 K

tasklist.exe /fi=filter,

작업관리자에서 확인하거나 processexplorer, processhaker 등을 사용하여 상세 정보 확인.

프로세스 강제종료

  • PID로 프로세스 강제 종료
taskkill /f /pid 1236

권한이 부족해서 실패한다면 관리자 권한으로 cmd창을 실행해서 해야 한다.

  • 프로세스명으로 강제종료
taskkill /F /T /IM notepad.exe
taskkill /f /fi "imagename eq note*"

[참고] /F ; 강제 종료, /T; 하위프로세스포함. /IM; 이미지명. /FI ; 필터
이미지명과 필터는 와일드카드 (*)를 사용 가능.

Author: crazyj7@gmail.com

반응형
자모병합

자모병합 / 한타영타 변환기

필요해서 만들어봤습니다. 필요하시면 사용하세요. ^^
맥사용자가 한글이 포함된 파일명의 파일을 보내면 파일명에 들어간 한글의 자모분리 현상이 발생합니다!!! ( 한 -> ㅎ ㅏ ㄴ )
(맥와 윈도우의 한글호환이 안 되는 문제로 어쩔 수 없음.)
깨진 한글 파일명을 복원할 방법이 없을까??? 해서… 만들었습니다.

본 프로그램은 자모분리된 파일명을 복원(병합)해주는 기능을 함. (윈도우나 맥에서 분리된 한글 지원)

  1. 탐색기에서 파일명이 깨진 파일을 드래그하여 가장 위에 에디트 창에 넣는다. (직접 스트링을 입력해도 됨.)

  2. File Rename 버튼을 누르면 복원된 이름으로 이름 변경됨.

부가 기능으로 화면 아래에 한글의 한타와 영타를 전환해주는 기능도 있음. 이건 한글이 안나오는 사람들을 위해…

image

직접 만든 바이너리 해시값도 첨부합니다. (무결성 확인용)
아래 해시값이 원본입니다.

다운로드 경로
https://www.mediafire.com/file/maydhuaqacpdg63/hantaui_Release.zip/file

c:\>certutil -hashfile hantaui_Release.zip
SHA1 해시(hantaui_Release.zip 파일):
7d 3d df bb bd 3c 53 ad 00 f8 2e a0 79 47 c4 cd 87 50 11 4b
CertUtil: -hashfile 명령이 성공적으로 완료되었습니다.

c:\>certutil -hashfile hantaui.exe
SHA1 해시(hantaui.exe 파일):
27 e2 b2 ea e3 66 44 5e 2e bb d1 3f af 1f 34 e5 07 15 e6 32
CertUtil: -hashfile 명령이 성공적으로 완료되었습니다.

참고: 윈도우에서 간단하게 파일 해시값 확인

certutil -hashfile 검사할파일명

기본적으로 SHA1 해시값을 출력한다.
다른 해시 알고리즘을 사용하려면 뒤에 알고리즘명을 추가한다.
예를 들면 MD5, SHA1, SHA256 등을 쓴다.

certutil -hashfile 검사할파일명 SHA256

Author: crazyj7@gmail.com

반응형

크롬 브라우저 현재 최신버전으로 업데이트하지 마세요.
한글 입력 버그 있음.
버전 78.0.3904.70(공식 빌드) (64비트)
크롬에 설정에서 현재 버전 확인을 하게 되면 자동(!)으로 강제업데이트됩니다.

문제는 이렇게 업데이트된 후에,
검색시에 한글누르고 스페이스 누르면 한글이 삭제되는 버그가 있고,
브라우저내에 채팅창같은곳에 스페이스를 누르면 스페이스가 안먹히고, 두 번 눌러야
스페이스 한 개가 들어갑니다....

나만 그런줄 알았는데 방금 업데이트 한 것을 보니 같은 증상이 나타났음.
패치 나올때 까지 기다리세요 ㅜ.ㅜ

이미 업데이트가 되어버렸는데, 이전으로 돌리려면????

 

크롬 옛날 버전으로 복구 방법. 패치가 나오기 전까지 옛날 버전을 사용하려면...
먼저 자동업데이트를 중지한다. 아래 경로에서 3번을 수행(서비스 중지)
https://www.webnots.com/7-ways-to-disable-automatic-chrome-update-in-windows-and-mac

간략히 요약하면 service.msc 실행해서 Google 업데이트 서비스로 나온것들 사용안함으로 중지하는 겁니다.

 

7 Ways to Disable Automatic Chrome Update in Windows and Mac » WebNots

Learn how to disable automatic Chrome update in Windows and Mac by renaming update folder, blocking update URL, from service manager, registry editor, system configuration and modifying plist file.

www.webnots.com

 

이제 크롬을 삭제(프로그램 추가/제거에서 크롬 삭제)하고 아래 경로에서 재설치. (바이러스 검사해본 결과 이상 없어서 저도 이렇게 복구했습니다.)  설치 후 한 번 더 위와 같이 구글 업데이트 서비스 사용 안함으로 해주세요. (크롬을 설치하니 자동으로 서비스 시작으로 되는 것 같더군요.)

https://www.slimjet.com/chrome/download-chrome.php?file=files%2F76.0.3809.100%2FChromeStandaloneSetup64.exe

'Develop > Windows' 카테고리의 다른 글

윈도우 리스닝포트 찾아 강제종료  (1) 2021.02.24
자모병합 / 한타영타 변환기  (3) 2020.11.10
커맨드(cmd)창 관리자권한 실행  (1) 2019.10.23
Windows10 IP Change command line  (0) 2019.10.23
DOS Batch Script  (0) 2019.10.06
반응형

 

cmd(콘솔)창 관리자권한으로 실행하기

cmd 창을 자주 사용하는데, 가끔 관리자 권한이 필요해서 다시 창을 띄우는데 띄우기가 번거롭다.
윈도우 기본 기능으로 빨리 cmd창을 관리자 권한으로 실행할 수 없을까?

  1. Ctrl+Shift+ESC 키를 누른다. (작업관리자 실행됨)
  2. Alt를 계속 누른 상태로 F, N을 차례로 누른다.
    image
  3. cmd를 입력 후, 키, 스페이스키, 엔터 순서로 입력한다. (관리자 권한을 체크하여 실행)

Author: crazyj7@gmail.com

추가로... 더 간단한 방법이 있다...

윈도우키+X 후에 A를 누른다.

 

 

'Develop > Windows' 카테고리의 다른 글

자모병합 / 한타영타 변환기  (3) 2020.11.10
크롬 한글 버그 수정  (1) 2019.10.28
Windows10 IP Change command line  (0) 2019.10.23
DOS Batch Script  (0) 2019.10.06
curl 사용법/HTTP 테스트  (0) 2019.10.01
반응형
windows_ipchange

Windows10 IP Change Command line

윈도우10에서 PC나 노트북 이동시 자주 사용하는 곳을 왔다갔다할 경우 자주 IP 변경해야 할 경우, 그 때마다 네트웍 설정을 해 주기가 너무 번거롭다.
이것을 커맨드 라인으로 자동화 할 수 있으면 편리하다.
이런 사용자들을 위한 팁.
윈도우 10 IP 변경 커맨드 라인

장소1

현재 네트웍 정보를 확인하고 화면캡쳐를 해둘것을 권장한다. 나중에 찾아볼때 편하다. 네트웍디바이스(NIC)명을 확인하고 ip address, network, gateway, dns 설정 등이다.

ip1
위에서 “이더넷 어댑터” 뒤에 나온 스트링을 잘 기억해야 한다. 보통은 “로컬 영역 연결” 이라고 나오는 것이 일반적이다. PC마다 다를 수 있어서 확인해 주어야 한다. 여기서는 “알수없음” 이라고 나와있어서 그렇게 작성하였다.

아래와 같이 배치 파일(network_pub.bat)을 만들어 준다. 이것은 장소1에서 현재의 네트웍 상태로 만들어주는 스크립트이다. 위에서 나오는 필드들을 잘 확인하여 자신에 맞는 형태로 바꾸어 주면 된다. (인터페이스명과 IP들만 바꿔준다.)

ip2

netsh int ip set address "알수없음" static 172.16.10.11 255.255.0.0 172.16.10.254 1
netsh int ip set dns "알수없음" static 172.16.10.1 primary  validate=no
netsh int ip add dns "알수없음" 168.126.63.1 index=2 validate=no

장소2

장소2에서도 마찬가지로 부여받은 고정IP로 네트웍을 설정한 후, 현재 상태를 확인한다. (이것도 별도로 화면캡쳐 해 두는 것이 좋다.)
이더넷 어탭터(NIC 인터페이스) 이름은 장소1에서 사용한 이름과 동일할 것이다. IP address, NetMask, Gateway, DNS IP를 확인한다.
ip3

이제 장소2의 네트웍 변경 커맨드를 아래와 같이 작성한다. (인터페이스명과 IP들만 바꿔준다.)
image

netsh int ip set address "알수없음" static 192.168.10.11 255.255.255.0 192.168.10.254 1
netsh int ip set dns "알수없음" static 8.8.8.8 primary validate=no

완료

주의!!! 위 배치 파일을 실행하기 위해서는!!!
cmd.exe 창을 열 때 반드시 관리자 권한으로 실행해야 한다.
(cmd 명령프로프트 아이콘에서 마우스 우클릭하여 관리자권한으로 실행)

이제 장소 1에서는 network_pub.bat를 실행하고, 장소2에서는 network_pri.bat를 실행하기만 하면 고정IP가 설정대로 변경될 것이다.
이제 더 이상 장소 이동시 귀찮은 네트웍 설정 변경 작업을 하지 않아도 된다!!!

Author: crazyj7@gmail.com

'Develop > Windows' 카테고리의 다른 글

크롬 한글 버그 수정  (1) 2019.10.28
커맨드(cmd)창 관리자권한 실행  (1) 2019.10.23
DOS Batch Script  (0) 2019.10.06
curl 사용법/HTTP 테스트  (0) 2019.10.01
화면/윈도우 동영상 녹화 (mp4, gif)  (0) 2019.09.23
반응형
DOSBatch

DOS Batch

윈도우 커맨드에서 실행하는 DOS 스크립트 작성 방법. 쉽지만 막상 필요한 것을 하고 싶을 때 쉽지만은 않다. 자료가 많이 부족하다.

주석

  • 주석 명령은 설명문으로 실행되지 않는다.
  • rem 으로 실행하고 뒤에 주석문(아무 스트링)을 입력하면 된다. 주석은 프로그래밍시에 간략한 설명을 위한 것이다.
  • @rem test message… : 앞에 @를 붙이면 배치파일 실행시 rem 커맨드 출력이 안되도록 한다. 물론 그 전에 @echo off을 해 두었다면 @을 붙일 필요없다.
  • 더 간단하게는 :: 으로 시작하면 주석이 된다. 이것은 커맨드 출력도 되지 않아 더 간편히 사용할 수 있다. rem과 다르게 아예 없는 것으로 취급된다.

변수와 출력

  • dos batch는 파일 확장자를 .bat 또는 .cmd로 하여 메모장으로 텍스트 파일로 작성하면 된다.
  • 기본 적인 출력은 “echo” 커맨드가 있다. 뒤에 출력할 내용을 적으면 된다.
  • 출력 내용에 변수명을 적어 변수값을 출력할 수 도 있다. 또한 변수중에는 미리 시스템에서 정의된 값들도 있어서 유용하다.
  • 변수 설정은 set으로 변수이름과 값을 =으로 할당한다.
  • 변수 사용시에는 변수 이름 앞뒤로 %를 붙인다. 변수 삭제는 빈 값을 할당한다. (빈 값이 있는 변수로 만드는 것이 아니라 변수 자체를 삭제한다는 의미!)

SET FOO=hello world
echo %FOO%
echo %FOO%xxx%FOO%
SET FOO=

  • for문의 변수 이름은 커맨드창에서 바로 실행할 때 영문자앞에 %를 붙인다. 그러나, Dos batch file(.bat)에서 for문의 변수 영문자 앞에 %% 이렇게 %를 두 개 붙인다!
c:\> copy con test1.bat
@echo off
@rem this is a test batch...
set aaa=hello
echo %aaa%
echo %1
^Z
c:\> test1 kim
hello
kim
  • @echo off는 이후에 echo 실행명령은 출력하지 않고, 결과만 출력하도록 한다.

  • batch 파일 실행시 뒤에 파라미터를 줄 수 있는데, 순서대로 %1, %2, … 이렇게 변수로 사용할 수 있다.

  • 줄바꿈. 엔터 입력. 빈 줄 출력

echo.

  • 공백으로 시작하는 문자열 출력

echo. aaa
echo aaa (이것도 이제는 가능함. 앞에 공백 두 개)

  • 특수 문자 출력시 앞에 ^를 사용

echo ^< 이것은 꺾은 괄호 ^>
echo ^| 파이프
echo ^^ 두 개 입력시 하나 출력

스트링 처리

  • 문자열 추출 mid / substr

FOO 변수의 값에서 인덱스 6부터 3글자를 추출. (인덱스는 0부터 시작) 뒤에 수를 생략하면 끝까지를 의미함. -1은 마지막 바로 한글자를 의미.
set BAR=%FOO:~6,3%
set BAR=%FOO:~5%
set BAR=%FOO:~-3% : FOO가 파일명일떄 마지막 세글자(확장자명)을 가져온다.

연산

  • 수 값을 할당하거나 연산하려면 SET /a를 사용한다.

set /a num=4*8+8/2+122
set /a num=1
set /a num+=2
if %num% GEQ 3 echo big

환경 변수

%CD% : 현재 작업 디렉터리
%DATE% : date 커맨드와 같은 포맷의 날짜
%TIME%
%RANDOM% : 0~32767 범위의 수
%ERRORLEVEL%
%CMDCMDLINE%

파라미터

  • 파라미터는 %1, %2, 등으로 받는다. (%0은 배치파일 이름 자체임. %9까지 가능)
  • %*은 모든 파라미터를 의미함.
  • 파리미터 내부에 공백이 있으면 커맨드상에서 파라미터를 "로 둘러싼다. 단, 스크립트에서 "를 제거하고 받으려면 %~1, %~2 로 받는다.
  • 파라미터가 없으면 종료

if “%1” == “” goto :eof
파라미터에 "를 추가해 주어야 한다.’

Redirect

  • stderr까지 파일로 기록

cmd /c “test.exe” > “output.txt” 2>&1

  • 실행만 하고 출력은 없앰 (no output)

dir > nul
nul 이라는 파일은 생성되지 않는다. (NUL 대소문자 상관없음. 주의! L이 한 개임.)

type nul > a
0바이트짜리 a라는 파일 생성

program 2>output.txt
stderr 출력을 파일로 기록

배치내에서 배치 실행하기

call b.bat param1 param2

  • 동시 실행

start /d “directory…” /b program.exe
start /d “directory…” /b program.exe

디렉터리 경로명 이동

cd /d e:\temp

반복문 for

  • integer 증가

for /L %%n in (1,1,100) do net user %%n /add
1부터 100까지 증가하고, 숫자로 계정명으로 사용자를 추가한다.
(for의 변수는 커맨드로 실행시에는 %하나 batch file인 경우는 %% 두개를 사용한다.)

  • 1부터 5까지 출력

for /L %n in (1,1,5) do echo %n

  • 1부터 5까지 출력. 2씩 건너뜀.

for /L %n in (1,2,5) do echo %n
1,3,5 각각 한 줄로 출력됨.

goto

  • 종료시

goto :eof 또는 goto:eof
eof 레이블은 만들필요없이 미리정의된 거라 그대로 사용 가능
또는 exit /b 0

  • 레이블 지정과 goto

레이블 지정시에는 앞에 :을 붙이고 goto 시에는 :를 빼야 한다.
:loop
echo infinite…
goto loop

Sleep

@rem 3sec sleep
@ping 1.2.3.4 -n 1 -w 3000 > NUL

IF

  • 조건 판단
  • 같은지 확인 == 앞 뒤에 공백은 없어도 됨.

if %var% == 1 goto done
echo a
:done
echo b

  • if else : 괄호, 공백 주의

if %var% == 0 (
echo a
) else (
echo b
)

  • /i 옵션 : 대소문자 구분 없이 비교. (case-insensitive)

사용자 입력/텍스트파일변수

  • yn 선택지 (or 스트링 입력)

set /p result=message (Y/N)?
echo %result%
빈 값을 검사하려면 아래 코드를 참고

@echo off
:: init var for empty string.
set "result="
set /p result=are you ok(y/n)?
if "%result%" == "" (
echo no input
goto :eof
)
if /i "%result%"=="y" goto YES
if /i "%result%"=="n" goto NO

echo your input is %result%

  • 텍스트 파일을 첫 행을 읽어 변수에 할당

set /p var=<%temp%\filename.txt

> copy con lines.txt
hello1
hello2
hello3
^Z
> set /p var=<lines.txt
> echo %var% %var%
hello1 hello1

디렉터리

  • 중간 디렉터리까지 모두 생성. mkdir 대신 md를 사용

md “a\b\c”

  • 하위 파일/디렉터리 모두 삭제. /s 옵션

rmdir /s “dirname”

기타

  • 종료 : exit

exit /b 0 : /b는 cmd창은 남겨둔다는 의미. 뒤의 숫자는 프로그램 종료 리턴값. (다른 배치에서는 이 값을 errorlevel 변수로 받아 사용할 수 있다.)

  • 파일 병합 / 붙이기 concate
  • 파일 세 개를 붙여서 하나의 파일로 만든다.

copy 1.txt + 2.txt + 3.txt out.new /b

  • 배치 파일에서 다른 배치 파일 실행하기

call b.bat : call을 사용한다. 그냥 b.bat로 실행하면? b.bat가 종료시 나머지 스크립트로 돌아오지 않고 종료된다.

Author: crazyj7@gmail.com
Written with StackEdit.

'Develop > Windows' 카테고리의 다른 글

커맨드(cmd)창 관리자권한 실행  (1) 2019.10.23
Windows10 IP Change command line  (0) 2019.10.23
curl 사용법/HTTP 테스트  (0) 2019.10.01
화면/윈도우 동영상 녹화 (mp4, gif)  (0) 2019.09.23
windows 10 kernel structure  (0) 2015.08.28
반응형
curl

curl 사용법

패킷/메시지를 네트웍으로 전송하는 유용한 유틸리티입니다. HTTP/S로 GET/POST 등으로 데이터를 전송할 수 있습니다.

  • 설치

  • curl -h 를 하면 옵션이 다 나온다. 너무 많은 내용으로 읽어보기 어렵다. 필요할 때 마다 찾아서 사용하거나 아래 예제를 통해 옵션들을 배워보자.

사용 방법

많이 사용되는 옵션

  • v : 상세로그 보기
  • o : 출력 파일 지정
  • O : 출력 파일명을 자동으로 원격지 파일명과 동일
  • H : 헤더 추가
  • A : 에이전트 추가
  • d : 데이터 추가로 폼 데이터나 JSON 데이터 등을 POST로 보낸다. (단, -G 옵션이 있으면 GET으로 적용된다.)

HTML 받아오기(기본사용)

URL 주소만 뒤에 주면 알아서 받아온다. (GET방식) image

파일 받아오기

URL 주소가 image나 zip 등 바이너리 파일 주소인 경우 텍스트 출력이 아니라 파일로 받아오기. 단순하게 파일 받는 용도로 쓸 거면 wget 유틸리티가 더 편하다.
- URL 뒤에 --output 옵션으로 저장할 파일명을 지정한다. (–output 은 -o 와 같다. 대문자 -O로 하면 뒤에 파일명 지정할 필요가 없다. 원격지 파일명과 동일한 파일명으로 자동으로 생성한다.)

curl https://curl.haxx.se/windows/dl-7.66.0_2/curl-7.66.0_2-win64-mingw.zip -o a.zip
curl https://curl.haxx.se/windows/dl-7.66.0_2/curl-7.66.0_2-win64-mingw.zip -O

HTTP 헤더 보기

$ curl 주소 : 해당 주소의 html content만 출력
$ curl -i 주소 : 해당 주소의 html 헤더와 content를 모두 출력
$ cur -I 주소 : 해당 주소의 html 헤더만 출력 (-I는 --head와 같다)

GET에 추가 정보

헤더 추가
$ curl -H “Host: test.com” -H “name:jun” [주소] : 헤더 정보 추가하기. -H를 여러 번 사용할 수 있다.

User-Agent 추가
$ curl -A “Mozilla/5.0” [주소] : -A 뒤에 지정.
일반적으로 에이전트를 식별하거나 브라우져인척 가장하기 위해 사용한다.

URL 파라미터 추가
$ curl [주소]?key=value&key=value… : URL뒤에 파라미터를 지정.
$ curl -G [주소] -d “key=value&key=value” : -d 옵션은 POST DATA로 지정하는데, -G 옵션을 주면 GET방식 파라미터로 변한다.
$ curl -G [주소] -d “key=value” -d “key=value” : -d 옵션을 나눌 수도 있다.
즉, 위와 같이 입력하면 자동으로 [주소]?key=value&key=value 이런식으로 변환되어 GET으로 요청된다.

POST 사용하기

데이터추가
$ curl -X POST [주소] -d “데이터” : -X POST 옵션은 생략가능 (content-type 지정이 없으면 application/x-www-form-urlencoded 타입으로 보낸다.)

FORM 데이터 추가
HTML의 FORM에 name으로 지정된 부분에 값을 채워서 POST할 경우 사용한다. name을 key로 하여 아래처럼 값을 채워 보낸다.
$ curl -X POST [주소] -d “key=value&key=value&…” : (-X POST는 생략 가능. -d는 --data와 같다)
$ curl -X POST [주소] -d “key=value” -d “key=value” : (상동)
$ curl [주소] --data-urlencode ‘msg=한글’ --data-urlencode ‘name=kkk’ : url인코딩 변환 후 보낸다.

JSON으로 보내기
$ curl -H ‘Content-Type: application/json’ -X POST [주소] -d ‘{“id”:“abc”, “pwd”:“def”}’
$ curl -H “Content-Type: application/json” http://localhost:18899/sum -d “{\“a\”:10,\“b\”:20}”

DOS 커맨드에서는 데이터를 "로 감싸고 내부에 "가 있으면 \를 앞에 추가해 줘야 한다. Linux에서는 바깥을 '로 감싸면 된다. -d 옵션이면 POST로 가기 때문에 별도로 -X 옵션은 필요없다.

그 외 방법으로 사용하기

DELETE로 요청하기
$ curl -X DELETE -G [주소] -d key=value -d key=value
HTTP 인증
$ curl -v -u ID:PASSWORD [주소]

리눅스에서 웹서버 정상 체크 스크립트

#!/bin/bash

if [ "$#" -lt 1 ]; then
    echo "Usage: $0 [URL]"
    exit 1
fi

SVR=$1
RES=$(curl -L -s -o /dev/null -w "%{http_code}" ${SVR})

if [ ${RES} -ne 200 ];then
    echo "${SVR} fail: ${RES}"
    exit ${RES}
fi;

Author: crazyj7@gmail.com
Written with StackEdit.

+ Recent posts