Tuesday, June 23, 2009

Batch File

ตัวอย่างการเขียน batch file
  • เก็บไว้เป็นตัวอย่าง เผื่อโอกาสหน้าจะ ได้ใช้
  • ดูๆ ไป pattern ก็คล้ายๆ shell script บน unix อ่ะนะ
  • ที่มา http://www.thaiall.com/assembly/batch.htm
    Batch Processing?
    การประมวลผลแบบแบทช์ คือ วิธีการประมวลผลที่ทำการเก็บรวบรวมข้อมูลในแต่ละช่วงเวลาไว้ก่อน จนกว่าจะมีข้อมูลที่ประมวลผลจำนวนหนึ่ง จึงทำการประมวลผลพร้อมกัน เช่น เวลาเข้าออกของพนักงานอาจจะพิมพ์เก็บไว้ทุกสัปดาห์ แต่นำมาประมวลผลเดือนละครั้งเท่านั้น
    BAT file
    (BATch file) A file of DOS or OS/2 commands, which are executed one after the other. It has a .BAT extension and is created with a text editor. A file of DOS commands that are "batch" processed one after the other. Windows also supports batch files, which are mostly identical to the DOS commands. To create a DOS batch file, use a text editor such as Edit. If you use a word processor, save your batch file as an ASCII text file, not as a standard document. Always include a .BAT extension with your batch file name.
    + http://www.techweb.com/encyclopedia/defineterm.jhtml?term=DOSbatchfile

ฝึกเขียนคำสั่งที่จะใช้ใน Batch File
1 clsล้างจอภาพ (Clear Screen)
2 @echo offไม่แสดงการทำงานของคำสั่งใน Batch File
3 dir /?.
4 dir > a.
5 dir a.
6 echo aa.
7 echo aa > a.bat.
8 echo aa >> a.bat.
9 type a.bat.
10 copy con a.bat.
11 pause.
12 del a.bat.
13 md a.
14 deltree a.
15 cd \.
16 cd a.
17 cd ...
18 cd ..\b.
19 rd aลบห้อง a
20 dir a /w/sแสดงรายชื่อแฟ้มในห้อง a
21 echo y del c:\windows\command.com.
22 if exist %1 goto fileexists.
23 shutdown -r -f -t 0สั่ง restart force ปิดเครื่องไม่เตือน ทันที
24 ipconfig /releaseยกเลิก IP Address ที่มีอยู่
25 ipconfig /renewขอ IP Address ใหม่จากเครื่องบริการ DHCP
26 :x
net send * workgroup enabled
goto x
ทำการรบกวนระบบเครือข่าย
27 break offทำให้ไม่สามารถยกเลิกการทำงานของ Batch File
28 echo @echo off > c:\x.bat
echo break off >> c:\x.bat
echo ipconfig /release_all >> c:\x.bat
ใช้ batch file สร้าง batch file
29 Title แก้ไขให้เรียก x.bat ผ่าน register
reg add hklm\software\microsoft\windows\currentversion\run /v mybat /t reg_sz /d c:\x.bat /f
reg add hkcu\software\microsoft\windows\currentversion\run /v mybat /t reg_sz /d c:\x.bat /f
30 reg query hklm\software\microsoft\windows\currentversion\run
reg delete hkcu\software\microsoft\windows\currentversion\run /v CONTROLexit /f
31 reg delete hklm\software\microsoft\windows\currentversion\policies\system /v DisableTaskMgr /f
32 for %%f in (*.asm) do tasm %%f
for %%f in (*.obj) do tlink /t %%f
.
33 attrib > burin find "H" burinแสดงรายชื่อแฟ้มที่ซ่อนอยู่ แทน grep ใน Linux

ตัวอย่าง 1
สร้าง folder และแฟ้มด้วย boy1.bat
คำถามคือ สร้าง boy1.bat โดยดูผลลัพธ์ได้ไหม
    @echo off
    cd \
    md abc
    cd abc
    md aa
    md bb
    cd aa
    echo a > a1
    echo b > a2
    dir > a3
    dir > a4
    copy * ..\bb
    cd \
    dir abc /s/w

Result of running
C:\>z
a1
a2
a3
a4
4 file(s) copied.
Volume in drive C has no label.
Volume Serial Number is C876-B72B
Directory of C:\abc
[.] [..] [aa] [bb]
0 File(s) 0 bytes

Directory of C:\abc\aa
[.] [..] a1 a2 a3 a4
4 File(s) 875 bytes

Directory of C:\abc\bb
[.] [..] a1 a2 a3 a4
4 File(s) 875 bytes

Total Files Listed:
8 File(s) 1,750 bytes
8 Dir(s) 786,496 bytes free
C:\>

ตัวอย่าง 2
สร้าง boy2.bat สร้างแปล และประมวลผล java
คำถามคือ ท่านจะแก้ปัญหา เมื่อทดสอบได้หรือไม่ และ output ที่ได้คืออะไร
    @echo off
    echo help to write Java program and compile and execute
    echo wait for result
    echo ==================================================
    cd c:\j2sdk1.4.2_03\bin\
    echo class boy2 { > boy2.java
    echo public static void main(String args[]) { >> boy2.java
    echo System.out.println("oho batch file"); } } >> boy2.java
    javac boy2.java
    java boy2

ตัวอย่าง 3
สร้าง boy3.bat รับค่าผ่าน command line
คำถามคือ ผลลัพธ์เป็นอย่างไร ในแต่ละตัวอย่าง
เช่น
c:\>boy3 a b c
c:\>boy3 burin
c:\>boy3 burin b c
c:\>boy3 a loop c
c:\>boy3 a b loop
    @echo off
    set aaa=wow wow
    echo %aaa%
    echo %TEMP%
    echo =======================
    echo %0
    echo %1
    echo %2
    echo =======================
    set
    pause
    cls
    if .%1 == .burin goto burin
    if .%2 == .loop goto loop1
    if .%3 == .loop goto loop2
    goto end
    :burin
    echo burin rujjanapan
    dir /w
    goto end
    :loop1
    for %%x in (aa bb cc) do echo %%x
    goto end
    :loop2
    for %%x in (%1 %2 %3) do echo %%x
    goto end
    :end
    echo bye

@echo off
IF EXIST dir_name (
echo file_dir_name Exist
) else (
echo file_dir_name Not exist
)

IF EXIST file_name (
echo file_name Exist
) else (
echo file_name Not exist
)
:: input param start index 1 ,doest't 0
IF EXIST %1 (
echo %1 Exist
) else (
echo %1 Not exist
)
:: --------------------------------------------------------
:: LOOP.BAT
:: A batch file example using a batch loop.

:TOP
DIR
GOTO TOP

----------------------------------------------------------
:: RunMe.bat ของ syslinux

@echo off
echo.
set udrv=
for %%x in (syslinux.cfg syslinux.exe grub.exe menu.lst) do if not exist files\%%x goto error
set /p udrv=Enter the USB Drive (Example F:)
if "%udrv%"=="" goto nodrv
echo.
echo !! WARNING !!
echo.
echo this will install syslinux on %udrv%
echo Press any key to continue (or Close this window)
pause
echo Copying files to USB Drive...
for %%x in (syslinux.cfg grub.exe menu.lst) do echo copy /y files\%%x %udrv%\ && copy /y files\%%x %udrv%\
for %%x in (syslinux.cfg grub.exe menu.lst) do if not exist %udrv%\%%x goto errcopy
echo Making USB Drive bootable...
echo files\syslinux.exe -ma %udrv%
files\syslinux.exe -ma %udrv%
if errorlevel 0 goto ok
echo syslinux.exe error
pause
goto end
:ok
echo done
pause
goto end
:nodrv
echo nothing is selected
pause
goto end
:errcopy
echo Error while copying
pause
goto end
:error
echo file(s) missing (syslinux.cfg syslinux.exe grub.exe menu.lst)
pause
:end

    แนะนำเว็บ (Web Guides)
  1. http://www.fpschultze.de/bsh.htm (สุดยอด)
  2. http://www.computerhope.com/batch.htm
  3. http://gearbox.maem.umr.edu/batch/exmp1.htm
  4. http://www.ericphelps.com/batch/index.htm
  5. http://www.ericphelps.com/batch/tricks/index.htm

ทิป
  • เราสามารถคอมเน้นสคริปได้โดย :: colon สองอัน หรือป่าวไม่แน่ใจ ^^'
  • ส่วนถ้าเป็น colon อันเดียวจะเป็นการประกาศ label อ่ะนะ
  • ระวังเรื่อง case sensitive ด้วย เช่น if exist D:\Database กับ if exist D:\database ต่างกันนะ
  • เซงอยู่อย่างบางที เราแก้สคริปแหละ ผลยังเหมือนเดิม ให้เราลองปิดและเปิด cmd ใหม่

อื่นๆ

No comments:

Post a Comment