021b - Grub4dos command primer

NEW! eBook ‘Getting started with grub4dos‘ – complete guide with exercises and full command reference.

The following was translated by Google Translate from Chinese to English

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=322662&extra=page%3D1&page=1

WARNING: some formatting errors may be present.

 

NUMBERS

grub4dos numbers can be specified as:

decimal – e.g. set /a num=255

decimal plus quantifier – e.g. set /a num=2k, set /a num=0x2k (k m g t are recognised where k=1024, m=1048576, g=1073741824, t=1099511627776)

hex – e.g. set /a num=0xff

octal – e.g. echo -e \61 (max \377 = 255 decimal) only for certain commands such as echo -e and cat – e.g. cat –locate=\40 (hd0)0+1 to find spaces (20 hex) in MBR

if 0x31z==49z echo SAME

if 0x1ky==1024z echo SAME

if 0x10ky==16384z echo SAME

If number ends with an unrecognised character it is treated as a terminator.

 

SUPPORTED FILE SYSTEMS

grub4dos can read FAT, NTFS, exFAT, ISO9660, UDF and ext filesystems.

Writing to a file

For example:

echo fred > /myfile.txt

grub4dos can only write to an existing file (it cannot create a new file).

The fat grub4dos executable can be used to format and create new files under grub4dos and write to files on a FAT file system.

grub4dos NTFS support is limited. There are problems when writing to <2k byte files on some NTFS drives (where resident file is contained only in $MFT)

  • NTFS >1K MFT record size, >4K INDEX record size not supported
  • NTFS >4K non-resident attribute list and $BITMAP not supported
  • Encrypted files not supported

If writing to an NTFS file, you should ensure it is not a resident file (files approx 2k or more should always be non-resident and thus always safe to write to):

882.txt is not a resident file, 680.txt is a small resident file and writes to that file may not work.

File write support on ext????

 

PART 1 – LS, FIND, ROOT, ROOTNOVERIFY, MAP, CAT, CMP, DD, WRITE, READ, CALC, CHECKTIME, ECHO, PAGER, CLEAR

ls

Similar to the Linux ls command, similar to the dir command under Dos, list files and directories in the current directory (working directory) under

ls /boot

Lists the current directory (working directory) under names beginning with boot files and directories, do not use ls boot, it is only valid in the root directory.

ls /boot /

Lists the current directory boot directory of files and directories, do not use ls boot /, it is only valid in the root directory.

ls (hd0,0) /

Lists (hd0,0) files and directories, do not use ls (hd0,0), it is only valid in (hd0,0) for the current disk.

ls dev

Drive a list of all lists (not including drive partition)

ls /boot /> nul && echo exist

Determine the directory /boot /exists, if it exists, then the output exist (this method is invalid for an empty directory)

ls /boot> nul && echo exist! echo not exist

Determine whether there is a file name of the current directory (working directory) to boot the beginning of the file or directory, if it exists, then the output exist, otherwise the output not exist

ls (hd0,0) /boot /> nul && echo exist! echo not exist

Judgment directory (hd0,0) /boot /exists, if it exists, then the output exist, otherwise the output not exist

[Note: If no file folder, for the ls command is concerned that the folder does not exist. ]

[Note: Due to the illusion of the file name of the directory, the directory is called with the /generated by (ud) does not exist, so ls (ud) /time, lists (ud) all the files, but ls (ud) /boot /they can list all files in /boot /under, because the file names of these files are in /boot /beginning]

==============================

debug on

find

List all disks (disks, including partitions) (debug off = silent mode)

debug on

find +1

Lists all known file system disk (debug off = silent mode)

debug on

find checkrange 0x07 parttype

Lists all partitions of partition type 0x07 (NTFS) (debug off = silent mode)

find /ntldr checkrange 0x07 parttype

Find the partition type is 0x07 (NTFS) partitions which have /ntldr file and list partitions found.

find –set-root /ntldr

Finds equipment /ntldr file, the device is set to first found device, the current device is searched first.

find –set-root –ignore-floppies –ignore-cd /ntldr

Finds equipment /ntldr file, the device is set to first find the current device. Ignore the floppy and CD-ROM.

find –set-root –devices=upnhcf /ntldr

Finds equipment /ntldr file, the device is set to first find the current device. Specify search order: ud, pxe, network equipment, hard disk, CD-ROM, floppy disk. The current root is always searched first.

find –set-root –devices=upnh /ntldr

Finds equipment /ntldr file, the device is set to first find the current device. Specifies the search order, and ignore the floppy and CD-ROM.

find –set-root ls /grub/

Finds /grub/ directory of the device, the device is set to first find the current device. /grub /directory can not be empty, otherwise it will ignore the directory.

debug on

find –set-root makeactive –status

Find first active primary partition, current device is searched first. (debug off = silent mode)

find –set-root=/boot/grub /boot/grub/menu.lst

Find device contains /boot/grub/menu.lst, current device searched first, and set the working directory to /boot /grub

find root

Finds all formatted partitions and lists them… (requires 2016 or later version)

(hd0,0) Filesystem type is ntfs, partition type 0x07

(hd0,0)

(hd0,1) Filesystem type is ntfs, partition type 0x07

(hd0,1)

========

root

Displays the current device name and related information.

root (hd0,0)

The (hd0,0) as the current disk, the working directory is /, effects and root = (hd0,0)/ .

root (hd-1,0)

The (hd-1,0) is first ptn of last hard disk, set as the current disk, root working directory is /

root (hd0,0)/boot

The (hd0,0) as the current disk, the working directory is /BOOT, effects and root = (hd0,0)/boot/ .

root ()/boot

Modify the working directory is /BOOT directory under the current disk, effects and root = ()/boot.

root (hd0,0) > nul && echo ok ! echo fail

root (hd0,0) > nul || echo fail ! echo ok

The (hd0,0) is set to the current device, if successful, output ok, if unsuccessful, output fail. (The above two commands have the same effect)

==============================

rootnoverify (hd0,0)

Equivalent to root (hd0,0), but does not test the contents of the partition. This is used in some systems installed outside the GRUB can access the disk area, but still need to set the right circumstances the root partition. Some parameters need to be installed in order to determine the partition may be a problem.

The following commands can be executed correctly, but would not replace the root:

rootnoverify (hd0)

chainloader +1

boot

==============================

Device Types:

(fd0) first floppy disk = (0x00)

(fd1) second floppy = (0x01)

(hd0) first hard = (0x80)

(hd1) second hard drive = (0x81) [0xA0 – 0XFF are CD devices, so max is hd31]

(hd-1) last hard disk

Use (hd) to create a new virtual hard disk after the last hard disk, BIOS disk count will be incremented +!

(cd0) first drive, equivalent to (hd32), –init created by cdrom

(cd1) a second optical drive, which is equivalent to (hd33), –init created by cdrom

Due to the ability to identify cdrom is too low, while optical devices on the market almost all been replaced by U disk, so (cd?) This format may be phased out.

(hd0,0) on a hard disk of the first primary partition

(hd0,4) on a hard disk first extended partition

(hd-1,0) and finally the first primary partition a hard drive, or (hd-2,0) in this format, (hd-1, -1) not allowed in this format.

(hd #, 0) of the first primary partition (hard disk on #)

(hd #, 1) second primary partition (hard disk on #)

(hd #, 2) third primary partition (# on the hard disk)

(hd #, 3) fourth primary partition (hard disk on #)

(hd #, 4) first logical partition (# on the hard disk)

(hd #, 5) a second logical partition (on the hard disk #)

(hd #, 6) a third logical partition (on the hard disk #)

(hd #, 7) The fourth logical partitions (on hard disk #)

(hd32) first optical drive = (0xA0)

(hd33) second optical drive

(0xFF) final drive (hd127)

() The current disk

(bd) the initial boot device (devices including disk and drive)

(cd) from the CD to start, Grub4Dos captured bootable CD, if not booted from the CD, there is no (cd) device

(ud) Fbinst way to start making a hidden partition

(pd) PXE network boot device

(nd) network drives, now is not commonly used (nd no longer exists and has been replaced by pd)

(md) memory drive, to achieve the whole memory as a disk drive to visit

(rd) random storage drives.

(md) device accesses memory from physical address 0, has 512 byte ‘sectors’

(rd) can be accessed starting at any base memory address

Named in digital equipment:

fd0 – fd126: 0x0 – 0x7E (virtual floppy diskettes and exclude 0x21 and 0x23)

pxe: 0x21 (network boot device)

ud: 0x23 (Fbinst hidden partition)

rd: 0x7F (random memory storage drive)

hd0 – hd30: 0x80 – 0x9E (hard disk and virtual hard disks)

cd: 0x9F (captured bootable CD, this is not necessarily correct, depending on the bios may be)

hd32 – hd127: 0xA0 – 0xFF (CD and virtual CD-ROM)

+1 Indicates the rest of the device following the first sector of a device as a single file view:

(hd0)+1 will be the first sector of the entire hard disk as a file (of a sector)

(hd0,0)+1 will be the first sector of the partition as a whole file (of a sector)

(fd0)+1 will be the first sector of a floppy disk as a whole file (of a sector)

(cd0)+1 will be the first sector of the entire disc as a file (of a sector – sectors usually 2048 bytes)

(md)+1 will be the first sector of the entire memory as a file (of a sector)

(rd)+1 this rather special, all the contents of the specified memory as a file

[Note: (rd)+1 This always represent the file, which contains all the bytes are stored in the (rd) ]

Can also use + 2, + 3, etc., represents the first two or first three sectors viewed as a single file:

(hd0)+2 first two sectors entire hard disk as a file (of two sectors)

(hd0,0)+3 first three sectors throughout the district as a file (a total of three sectors)

(fd0)+5 entire first 5 sectors of the floppy disk as a file (a total of five sectors)

(cd0)+10 first 10 sectors of the entire disc as a file (of 10 sectors)

(md)+32 32 sectors across the front of memory as a file (a total of 32 sectors)

(rd)+2 first two sectors of the specified memory as a file (of two sectors)

You can also use a similar approach 32+5:

(hd0)512+2 the first two sectors after 512 sectors of the entire hard drive as a file (two sectors)

(hd0,0)1+3 The three sectors starting at the 2nd sector of the first partition as a file (a total of three sectors)

(fd0)1+1 will be sector #2 of whole floppy disk as a file (one sector)

(cd0)128+1 will be sector 128 as a file (one sector)

(md)0+32 32 sectors the start of memory as a file (a total of 32 sectors)

(rd)0+1 is equivalent to (rd) +1, all the contents of the specified memory as a file

About the (rd) Device:

(rd) devices only references the memory region, the memory area (rd) device is not being referenced protected, you can (rd) be interpreted as pointing to a block of memory pointer. In Grub4Dos, many things are free, unprotected, without limitation, (rd) is one of them.

(rd) is not a int13 device, but merely a grub4dos device. In grub4dos inside presence (rd) device, but after entering the DOS, there is no (rd) equipment was.

(rd)+1 always represents the entire contents (rd) device, rather than the first sector.

You can get information (rd) device via the following address:

set /a rdnum=*0x82CC # get the (rd) device number

set /a rdbase=*0x82D0 # get the starting address (rd) devices

set /a rdsize=*0x82D8 # get the total size (rd) devices

Information can be freely set (rd) device through the following methods:

map –ram-drive=0xFF7F # set (rd) device number of (rd)

map –mem –rd-base=50000 # Set (rd) devices starting address

map –mem –rd-size=30000 # Set (rd) devices the total size

map (hd0,1)+1 (fd0) # map a partition as a floppy drive

The following command only modifies the information (rd) devices:

map –mem /FILE (rd)

Here (rd) pointing a memory area which contains the content of /FILE file, but this memory is not protected, thus the memory at any time may be accessed by other code, and even modify Grub4Dos itself .

The following commands also modifies the information (rd) devices, but (rd) memory area pointed to is protected, because it (fd0) overlap, and (fd0) is protected:

map –mem /FILE (rd)

map –mem /FILE (fd0)

map –hook

If do not change the order of the first two lines or it won’t work!

map –mem (md)+4 (99) – maps a 2048 byte drive near the top of 32-bit addressable memory (max. 4GB)

map –mem –top (md)+4 (99) – maps a 2048 byte drive near the top of memory (max 4TB)

map –status

Display the status of disk emulation.

map /PE.ISO (0xFF)

map –hook

The /PE.ISO mapped to (hd127) simulation disk, /PE.ISO must be continuously stored in the disk can not be fragmented.

map /win.vhd (hd)

map –hook

Map file as next available hard disk and increment BIOS hard disk count.

BIOS hard disk count is incremented if new disk is last BIOS disk+1

map –mem /PE.ISO (0xFF)

map –hook

/PE.ISO First loaded into memory, and then mapped to (hd127) simulation disk, /PE.ISO may have debris.

map –mem=-2880 /FLOPPY.IMG (fd0)

map –hook

/FLOPPY.IMG is first loaded into memory, and then mapped to (fd0) floppy disk emulation, (fd0) will occupy at least 1440KB (2880*512) of memory.

map –mem –top /BigPE.ISO (0xFF)

map –hook

The /BigPE.ISO loaded into high memory, and then mapped to (hd127) simulation disk to load the image into high memory can not use gzip compression, but not both achieve.

In grub4dos, the memory is divided into at 3.25G high memory and low memory ends 3.25G mirroring can not cross this point. If your memory is less than 3.25G, you do not have the high-end memory available.

map –unmap=0xFF

map –rehook

Uninstall (hd127) disk emulation. You can not use –unmap=(0xFF) method to uninstall, – unmap= must be followed by a number.

–rehook used to stop the simulation disk and frees up memory, equivalent –unhook then –hook (so it seems, map –unhook command does not seem to be used separately)

map –unmap=0,0×80,0xFF

map –rehook

Uninstall multiple simulations disks.

map –unmap=0:0xFF

map –rehook

Uninstall all disk emulation.

If you want to uninstall a device by device name using a different method, you can do:

map (hd127) (hd127)

map –rehook

map –read-only /FLOPPY.IMG (fd0)

map –hook

(fd0) can only read, cannot write, prevent /FLOPPY.IMG file is corrupted.

Mapped to emulate disk files can all be modified, whether it is IMG, ISO, VHD, etc., unless –read-only parameter.

map –fake-write /FLOPPY.IMG (fd0)

map –hook

(fd0) is false writing state, data can be written, but not recording to the (fd0), preventing /FLOPPY.IMG file from corrupted.

map –in-situ (hd0,4)+1 (hd0)

used to map a logical partition as a primary partition by creating virtual MBR and PBR in memory which will be accessed by BIOS calls.

Can be used to boot DOS-based OSs (DOS,Win95/98/Me) and trick it into thinking it is booting from a Primary partition.

Unlike the partnew command, no change is made to the physical MBR or PBR.

map –unsafe-boot /FLOPPY.IMG (fd0)

map –hook

Allow modification boot sector.

MBR is protected from writes unless –unsafe-boot is used – e.g. map –unsafe-boot (hd0,0)/image.vhd (hd1)

map — disable-chs-mode /FLOPPY.IMG (fd0)

map –hook

Disable (fd0) of CHS access.

map –disable-lba-mode /FLOPPY.IMG (fd0)

map –hook

Disable (fd0) the LBA access.

map command can also be used to modify the information (rd) random access memory, the above have said.

map –add-mbt=option to be used with –mem. If option=0 master boot track will not be added automatically.

map –top option to be used with –mem. Use –top –mem if the file is >2GB.

map –mem will try to allocate memory at highest available address.

map –mem-max=, map –mem-min options to be used before map –mem. Allow user to manually limit range of address that map –mem can use. function parses K,M,G,T suffix after number – e.g. map –mem-max=4G.

map –mem will allocate memory even if the command fails due to insufficient RAM.

Note: In the map on the command line, (hdm, n) +1 style of writing is interpreted as representative of the (hdm, n) partitions, rather than just the first sector of the partition.

Note: – after unhook disk emulation, unless you then do –unmap, mapped disks will again be automatically mapped on next –hook

==============================

Disk swapping on the map command:

# Intended to be mapped to the current device (hd0)

map () (hd0)

# Intend to (hd0) is mapped to the current device

map (hd0) ()

# Begin mapping now

map –rehook

==============================

cat /menu.lst

The display /menu.lst

cat –hex /grldr

To display the contents in hexadecimal of /grldr

cat –skip=1024 /menu.lst

display /menu.lst contents, skip the first 1KB

cat –length=10 /menu.lst

display /menu.lst contents only the first 10 bytes

cat –locate=”\x20 ” /menu.lst

Find two consecutive spaces (escape character + non escape character) in /menu.lst the (case-sensitive)

cat –locate=abc /menu.lst

Find abc string (non-escaped characters) in /menu.lst the (case-sensitive)

cat –locatei=abc /menu.lst

Find /menu.lst the string abc (case insensitive)

cat –locate=abc –number=3 /menu.lst

Find abc string /menu.lst show only the results of the previous three found

cat –locate=abc –replace=def /menu.lst

Find the abc string /menu.lst and replaced def

cat –locate=abc –replace=def –number=3 /menu.lst

Find /menu.lst the abc string and replaced def, just replace the three former results found

cat –locate=abc –replace=def –locate-align=16 /menu.lst

Find the abc string /menu.lst and replaced def, replace only 16 position aligned with results

By the following command to see the effect of –locate-align=16 (search starts at 16-byte boundaries): – make file of all 00 bytes (/menu.lst must exist)

echo -n > /menu.lst

cat –locate=\x00 –replace=1 /menu.lst

cat /menu.lst

cat –locate=1 –replace=0 –locate-align=16 /menu.lst

cat /menu.lst

(first byte will be 0 followed by 15 1’s, etc, etc,)

cat –length=0 ()-1

Fixed usage, return the current partition address offset in bytes – e.g. %@retval% returns 0x7E00 (=63*512)

cat –length=0 () /menu.lst

Get /menu.lst file size (if file >4GB then returns max 4GB)

cat –length=0 ()/menu.lst > nul && echo exist ! echo not exist

/menu.lst Determine whether there is a file, if it exists, then the output exist, otherwise the output not exist

Escape character summary:

\nnn 1-3 octal character code representation (\377) octal maximum value of \377 (255 decimal), exceeding the 377 code will then be converted modulo 377, for example, \400 represents \0

\xnn a 2-digit hexadecimal chracters (0-9 A-F) (\x00-\xFF) code indicates that the maximum value of \xFF

\ Blank space character

\\ \ Character (backslash)

\” ” Character (double quotes)

\’ ‘ Character (single quotes)

\a alert (bell)

\b backspace

\f formfeed

\n newline

\r carriage return

\t horizontal tab

\v vertical tab

[Note: Performing cat –locate= or cat –locatei =, you can get the position of the last occurrence using %?%]

For example:

cat –locate=b /File > nul

set /a Last=%?% > nul

Explanation: cat –locate=a /File returns results like 29 35 48 99 but the variable ? is set to the position of the last byte found.

With skill you can use &; operator to achieve this on one line (this does not work if you use &&)

set Last=-1 && cat –locate=a /File &; set /a Last =%?% > nul

sets a to a space character:

set “a= “

set multiple spaces before a string:

set “a= here are spaces”

cmp /menu.lst /m.lst

Compares two files are identical.

cmp –hex /menu.lst /m.lst

Compare two files are identical, and compare the results displayed in hexadecimal format.

cmp /menu.lst /m.lst > nul && echo same ! echo different

Compare two files are the same, if the same, then the output same, otherwise the output different.

==============================

dd command

dd if=()/menu.lst of=()/m.lst

Copy the contents of the /m.lst in /menu.lst

dd if=()/menu.lst of=() /m.lst bs=32 count=5

A block size of 32 (default 512), copy data from five blocks from /menu.lst into /m.lst

dd if=()/menu.lst of=()/m.lst bs=10 skip=5 seek=6

10 as block size, copy data from /menu.lst into /m.lst in. When copying, skip the first five blocks /menu.lst, and start reading from the first 6 blocks, a write, skip the first seven blocks /m.lst from the first eight blocks to start writing.

dd if=()/menu.lst of=()/m.lst buf=0x2000000 buflen=0x2000000

Copy the contents of the /m.lst /menu.lst, and when copying from 0x2000000 position memory (32M location) take 0x2000000 space (32M space) as a cache for copying large files, increasing the cache size dd can accelerate write speeds.

[Note: The source and target files must be present, the path must begin with a device name, the excess length of the file will be discarded, the target file can not be gz compressed files, source files can be compressed gz files, compressed files before replication be extracted. dd for the entire device can read and write operations: dd if=(fd0) of=(fd1), with caution. ]

==============================

write and read

write /menu.lst abc

Abc written in three characters at the beginning /menu.lst file, overwriting the original characters.

write /menu.lst “abc”

Write five characters “abc” at the beginning /menu.lst files, overwrite the original characters.

write /menu.lst \”abc\”

Write five characters “abc” at the beginning /menu.lst files, overwrite the original characters.

[Note: The string is written, in addition to the beginning of the space, other spaces, or single or double quotation marks do not need to escape, escape can be processed, the backslash must be escaped]

[Note: The target file must exist, some beyond the length of the file will be discarded, the target file can not be gz compressed files, source files can be compressed gz files, compressed files before copying will be extracted. write commands to operate the equipment: write (fd0) abc, caution. ]

write –bytes=2 0x8274 0x2001

If the object is not written to a file or device, but a number, this number represents a memory address, the address of the memory data write modified to specify the value of the data to be written must be an integer, not a string. Practice with the following memory address:

write 0x50000 -1

read 0x50000

>> Address 0x50000: Value 0xffffffff

write 0x50000 0

read 0x50000

>> Address 0x50000: Value 0x0 (four bytes, 32-bits)

write –bytes=3 (md)0x300+1 \x00\x01\x02 where bytes n = 1-8

If target is FILE (not ADDR) then must specify byte string \x00\x01 etc.

read 0x60000

Reads a 32-bit value from the specified location in memory, and displayed in hexadecimal form.

read -8 0x6000 (64-bit read)

[also calc *0x60000]

‘raw write’ and ‘raw read’ can be used to prevent decompression of gz or lzma source

==============================

Grub4dos itself to conventional memory usage situation is now as follows:

00000 ~ 0FFFF occupied grub4dos program code and stack.

10000 ~ 1FFFF grub4dos future for code and data retention.

20000 ~ 2FFFF is grub4dos geometry kernel automatically detect occupancy, as a buffer.

30000 ~ 37FFF occupied grub4dos kernel conventional disk read and write buffers.

38000 ~ 4FFFF grub4dos reserved for future expansion.

50000 ~ 7FFFF reserved for users

100,000 to 110,000 by the dd command of the disk buffer occupancy.

[Note: The above content on memory allocation is not necessarily accurate, correct me hope developers]

==============================

calc 1 + 1

1 + 1 is calculated, you can do: + (plus), – (minus), * (multiplication), /(division),% (I), << (left), >> (right) , & (and), | (or), ^ (XOR)

calc 0xFF

Display 0xFF decimal and hexadecimal results

calc *0x8280

Display integer value stored at the memory 0x8280

calc *0x50000=1

The integer value stored at the memory 0x50000 changed to 1

calc *0x50000=*0x8280

The integer value stored at the memory 0x50000 change to the integer value stored at 0x8280

calc *0x50000=1<<4

The integer value stored at the memory 0x50000 modify the results of the calculated (1<<4=16)

[Note: In the set /a var=value in, value can be calculated using the above method: set /ab=*0x8280]

calc and set /a minus number can be treated as a negative, but to add a space after the minus sign, for example, the following code:

set a=-32

set /a b=0-%a%

Above the set command can not calculate the value of 0–32, with the following wording can be calculated (add a space after the minus sign):

set a=-32

set /a b=0- %a%

Above the set command can calculate the value of 0- -32, the result is 32.

==============================

checktime syntax checktime minutes hour dayofmonth month dayofweek(0-6) 0=Monday, 6=Sunday

checktime

Displays the current date and time the week

checktime * 0-12 * * * && echo morning ! echo pm

Display different information according to different time. (Checktime points during the week day month)

checktime * * * * 6,0 && echo weekend ! echo Weekday

Display different information according to different time. (Checktime points during the week day month)

checktime * * * * * /2 && echo Fortnight ! echo single week

Display different information according to different time. (Checktime points during the week day month)

checktime 0,1-59/15 * * * * && echo whole quarter of an hour ! echo quarter non-integer

Display different information according to different time. (Checktime points during the week day month)

==============================

echo \\ Hello

Output on the screen \\ Hello (end of the line will automatically add line breaks)

echo -n \\ Hello

Output on the screen \\ Hello (end of the line does not automatically add a newline)

echo -e \\ Hello

Output on the screen \ Hello (-e that handles the escape character)

echo -h

Echo display color table support

echo $[0x1F]abc

Use color table 1F at foreground and background colors display abc

echo $[0x1F]abc$[0xE4]def

Use color table 1F at foreground and background colors display abc, then use the foreground and background colors of the color table E4 def display

echo $[0104]abc$[]fred

Display abc in red and fred in current console colour. Bug: $[] must always be followed by a character or space or else strange characters are output.

echo $[0xFFFFFF00FF0000]fred

Display fred in red text on white background

echo -P:0101 abc

abc displayed in the first row and first column of the screen (must be a space after -P:xxxx)

echo -n > /menu.lst

Empty the contents of the file /menu.lst

0.4.6a 2016+

echo -e /X00FC/x18

/Xhhhh displays unicode/UTF-8 characters (must load a font file).

==============================

pager on

Open full screen page display mode

[Hit Q to quit, any other key to continue]

pager off

Close full screen page display mode

pager

Toggle page display mode switch

pager status

Output current page display full screen mode

clear

Clear the screen (to clear the contents displayed on the screen)

 

PART 2 – GRAPHICSMODE, VBEPROBE, TESTVBE, SETVBE, TERMINAL, TERMINFO, FONT, BACKGROUND, FOREGROUND

graphicsmode

The current mode of display graphics

graphicsmode 0x12

Use vga mode (640 × 480), recommended vbe mode

graphicsmode 0x6A

Use vga mode (800×600, camera support is not very good for some, there may be crashes), recommended vbe mode

graphicsmode -1 640

Use vbe mode, specify the resolution width of 640, if the width of the monitor does not support this resolution will fail

graphicsmode -1 800 600

Use vbe mode, specify the resolution width of 800 and a height of 600, if the monitor does not support this resolution will fail

graphicsmode -1 1024 768 32

Use vbe mode, specify the resolution width 1024, height 768, 32-bit color, if the monitor does not support this resolution or bit color, will fail

graphicsmode -1 100: 1000 100: 1000

Use vbe mode, the maximum available resolution width selected from the range of 100 to 1000, the maximum available height selected from the range of 100 to 1000

That is, the above command optional 320 × 200,320 × 400,640 × 400,640 × 480,800 × 600 resolution, etc., from which to select the highest resolution available

graphicsmode -1 100: 1000 100: 1000 24:32

Effect as above, but adds depth range of colors, the same, choose the highest color depth available in 24 colors and 32 colors in

[Note: grub4dos the vbe does not support 16-bit color depth and a lower, only supports 24-bit and 32-bit color depth. So, all of you graphicsmode command, you need to explicitly specify the color depth 24:32, can not be omitted. For example, the use of graphicsmode -1 and graphicsmode -1 800 600 is not entirely correct, it should be replaced respectively graphicsmode -1 -1 -1 24:32 and graphicsmode -1 800 600 24:32 considered right. ]

==============================

vbeprobe

Detection vbe information

vbeprobe 1024x768x32

Detection vbe information specified ?? not supported ???

vbeprobe 0x100

Detection vbe information specified graphics mode

==============================

testvbe 800×600

Test specified vbe mode, direct calls sometimes Huaping

setvbe 800x600x32

Before running to change the core of the system video mode, video mode information will be passed to the core. Huaping direct calls in most cases

[Note: setvbe command is mainly to some Linux boot process graphical interface and design, is not normally. Recommends that you never use it. If you can avoid it, try to avoid using it. Linux is usually in your own startup process, will set themselves the appropriate graphics mode, rather than to go through the settings grub4dos job. Therefore, the future may ban this setvbe command. ]

==============================

terminal console

Select the text-mode terminal

terminal graphics

Select the graphic mode terminals

terminal –no-echo graphics

Select the graphic mode terminals, and does not display the characters entered by the user

terminal –font-spacing=1: 2

In vbe mode, set the kerning to a line spacing of 2 units: Like a few points.

[Note: For more on terminal usage does not know how to use, it seems irrelevant. ]

==============================

terminfo

Display configuration information about the current terminal

[Note: For more on the usage of terminfo not know how to use, it seems irrelevant. ]

==============================

font /unifont.hex.gz

Load the font file that displays characters in vbe mode (file in hex format, can be compressed as gzip or LZMA)

default font height = 16 (may be 8 or 16 pixels wide)

font –font-high=24 /sft.f24

also –simp= for chinese (unsure how to use??)

Font Download:

https://code.google.com/p/grub4dos-chenall/

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=256198

0.4.6a 2016 – supports larger fonts – e.g. 24 (max 32 – Warning: 32 high will use more memory above (md)0xA0000)

for fonts, download Easy2Boot (24-pixel high font files end in .f24)

==============================

background 303030

Set the background color in vga mode, the other modes do not work

foreground FFFF00

Set the foreground color in vga mode and other modes do not work

================================================== ========================================

 

PART 3 – HALT, REBOOT, HIDE, UNHIDE, HIDDENFLAG, MAKEACTIVE, PARTNEW, PARTTYPE, BLOCKLIST, UUID, FSTEST, VOL

halt

Shutdown (halt, there are many parameters, when something goes wrong when you go off to study its parameters it)

reboot

Reboot (no arguments)

hide (hd0,0)

Hide the first hard disk first primary partition

unhide (hd0,0)

Unhide the first primary partition of the first hard disk

==========

hiddenflag

Displays the hidden status of current root device (for ud, cd, etc. do not work)

hiddenflag (hd0,0)

Displays the first hard disk hidden status of the first primary partition

hiddenflag –set

With the current device to hide

hiddenflag –set (hd0,0)

The first hard disk first primary partition is set to hide (ie, if the original partition type is 0x07, now partition type 0x17)

hiddenflag –clear

The current device is set to unhidden

hiddenflag –clear (hd0,0)

The first hard disk first primary partition is set to appear (that is, if the original partition type is 0x17, now partition type 0x07)

==============================

makeactive

The current device is set to active

makeactive (hd0,0)

The first hard disk first primary partition as active

makeactive –status

Show whether the current device is active

makeactive –status (hd0,0)

Displays the first hard disk is the first primary partition as active

==============================

partnew [–active] partition type starting-sector number [length]

or

partnew –active partition type CONTIG_FILE

creates a new primary partition table entry with values corresponding to the start-sector+length or file-start+length

e.g.

partnew –active (hd0,3) 0 /_ISO/ubuntu.iso

sets a partition of type 0 to start of ubuntu ISO – this partition will be automatically found and mounted by linux as CD filesystem.

If type=0 (or 0x10 for hidden) then the partition type will be set automatically depending on file contents or type 0 if not.

==============================

parttype

Display the current partition partition type

parttype (hd0,0)

Display the partition type of the first hard disk first partition

parttype (hd0,0) 0x17

The type of the first partition of the first hard disk partition to 0x17

==============================

blocklist /grldr

Show file information block, ie the starting block and the block length of the local file.

blocklist file pxe command can not be used on the device.

[Note: If a file is fragmented, blocklist file lists all the blocks, including debris, if too much debris beyond Grub4Dos buffer, the command will fail]

If small NTFS file, then first (attribute $MFT) block is not reported.

==============================

uuid

Column number at all devices uuid

uuid (hd0,0)

Uuid number designated display device

uuid 000E0336000C1B8D

Find uuid number 000E0336000C1B8D equipment, and set it to the current device

uuid (hd0,0) 000E0336000C1B8D && echo yes! echo no

If (hd0,0) The uuid number 000E0336000C1B8D output yes, otherwise no output

%?_UUID% and %?% will contain UUID

==============================

fstest

Order to help developers create file system supports code set, end users do not need it.

==========

vol

vol [–write] | –primary] [DEVICE] [VOLUME]

vol will list all volumes

vol FRED will set as root the volume with a label of ‘FRED’

vol (hd0) FRED will return TRUE if FRED exists on hd0

add –primary if you want the primary volume descriptor (as used by linux) instead of the standard volume name.

–write will overwrite the volume name (do not exceed vol name length limit)

================================================== ========================================

 

PART 4 – KERNEL, INITRD, MODULE, MODULENOUNZIP, CHAINLOADER, BOOT, PXE, QUIT

kernel [–no-mem-option] [–type=TYPE] FILE [ARG …]

Try to load the master boot image file. Other items will be used as the kernel command line parameters passed to the kernel.

Before using this command, the kernel used by the module should be reloaded.

–type Parameter for describing the kernel types, including “netbsd”, “freebsd”, “openbsd”, “linux”, “biglinux” and “multiboot”.

–no-mem-option parameters for describing the Linux memory need not automatically pass mem parameter to linux

==============================

initrd FILE [FILE2] [FILE…]

Initialize the virtual disk to load Linux format, and set the necessary parameters. Specify start before the real root file system access, access ramdisk images in the system.

By the following command to start the kernel and initrd Ubuntu 13.10 LiveCD:

title starts Ubuntu 13.10 amd64 LiveCD

# Find UBUNTU-13.10-X64.ISO where disk and set it as the current disk

find –set-root /BOOT/UBUNTU/UBUNTU-13.10-X64.ISO

# Try to load the master boot image file vmlinuz.efi, followed by the parameters passed to vmlinuz.efi.

kernel /BOOT/UBUNTU/vmlinuz.efi boot=casper iso-scan /filename=/BOOT /UBUNTU /UBUNTU-13.10-X64.ISO locale=zh_CN.UTF-8

# Load Linux virtual disk initialization format initrd.lz.

initrd /BOOT/UBUNTU/initrd.lz

Do not use multiple initrd lines for multiple image files, instead place all image files on same line, e.g. initrd /boot/file1 /boot/file2 /boot/file3

==============================

module FILE [ARG …]

For multiple boot image file to load the startup module (not handle the contents of the file, the user must determine their own core requirements).

The remaining arguments as “fast-mode command-line” pass, like kernel command.

This command is typically do not have access, when you want to start when the Linux system, and the system requirements for the load module file, will be used, related to the Linux system will be described, the average user can ignore this command.

==============================

modulenounzip FILE [ARG …]

Similar to the module, but disabled the automatic decompression.

As above, the average user can ignore this command.

==============================

chainloader

chainloader /ntldr

Load ntldr boot file

chainloader (hd0,0) +1

Load (hd0,0) first sector

chainloader +1

Load current of the first sector of the device

chainloader –force (hd0,0) +1

Load (hd0,0) in the first sector, the sector started to ignore the validity of identity, forced to start

[Note: chainloader there are many other parameters can be modified before the start of the CPU registers, but for the average user, these things will not be used, if you want to know more chainloader parameters, refer to “Grub4Dos help documentation “]

==============================

boot

Boot loaded operating system or chain loader sector, OK to start, usually with the use chainloader command in the menu file can be omitted, the command line mode requires.

chainloader /ntldr

boot

Load ntldr boot file, and then start.

boot -1

Call the BIOS int18 function, according to BIOS boot order set to start next device.

boot –int18

As above, call the BIOS int18 function, according to BIOS boot order set to start next device.

==============================

pxe

This command is more complex, later studies, the first local start to get to know. See http://diddy.boot-land.net/grub4dos/files/pxe.htm

The default, embedded menu in grldr contains pxe detect command – so grldr will automatically look for a PXE server and load a menu file from the server if one is found.

  1. pxe

If used without any parameter, pxe command will display current settings.

  1. pxe blksize N

Set the packet size for tftp transmission. Minimum value is 512,

maximum value is 1432. This parameter is used primarily for very old

tftp server where packet larger than 512 byte is not supported.

  1. pxe basedir /dir

Set the base directory for files in the tftp server. If

pxe basedir /tftp

then all files in the pxe device is related to directory /tftp, for example, (pd)/aa.img correspond to /tftp/aa.img in the server.

The default value of base directory is the directory of the boot file, for example, if boot file is /tftp/grldr, then default base directory is /tftp.

  1. pxe keep

Keep the PXE stack. The default behaviour of GRUB4DOS is to unload the PXE stack just before it exits.

Note: Do not use pxe keep if you first boot via PXE to grub4dos and then load grub4dos again to boot from a disk, otherwise grub4dos will just try to PXE boot again!

  1. pxe unload

Unload the PXE stack immediately. Does not work if pxe keep has been used.

=============================

quit

If you are entering the GRUB environment from DOS environment, use this command to return to the DOS environment.

quit –disable-a20

Use –disable-a20 parameter – A20 line will be disabled when the transfer control to DOS.

================================================== ========================================

 

PART 5 – CONFIGFILE, DEFAULT, SAVEDEFAULT, TIMEOUT, TITLE, IFTITLE, HIDDENMENU, PASSWORD, LOCK, MD5CRYPT, COMMANDLINE, GFXMENU, SPLASHIMAGE, COLOR, OUTLINE

Use the command line or menu file:

configfile /menu.lst

Load current menu file in the root directory of the device /menu.lst.

configfile (hd0,0) /menu.lst

#load (hd0,0) /menu.lst

configfile (md)4+8

Special usage, use grldr built-in menu. (md)4 is start of embedded menu.lst file.

To reset default config file path to use the built-in menu :

write 0x307ff8 1 && configfile

[Note: configfile command is executed, the current device and the current directory will be updated at the same time as the device FILE file.

If configfile command without any parameters in the initialization of the built-in menu command group, then control is transferred to the menu.lst file to start the device. ]

configfile

Load the last used configuration file (or \menu.lst from the current root)

==============================

Before use all menu items:

default 0

The first menu item is selected by default (if the user does not manually select words)

default saved

The default selection is set to the last savedefault saved menu item (savedefault executed in menu item, the default saved to /default file)

default /FILE

The default selection is set to the last savedefault save menu item (savedefault executed in menu item, the default saved to /FILE file)

e.g. default default is often used where default is a 2048-byte file.

[Note: /default file or /FILE file must be 2048 bytes in size]

==============================

Used in the menu items:

savedefault

The current menu item as the default menu is saved to /default or the default command to specify the /FILE in.

savedefault –wait=5

The current menu item to save as the default menu /default or the default command to specify the /FILE, the first five seconds to save the user a hint:

About to write the entry number x to file

Press Y to allow or N to deny.

If the user does not press the Y button, the default within five seconds does not save menu item.

==============================

Before use all menu items:

timeout 10

Menu list appears after 10 seconds, if the user does not manually select the default menu item to perform.

-1 = no timeout (infinite)

0 = immediate (no menu displayed)

only valid in menu (not commandline)

==============================

title menu title

Specifies the text of the menu item title

title menu title \ n menu prompts the first line \ n menu prompts the second line \ n …

The title text and text prompts to specify the menu item

[Note: If the menu item does not start sensitive command, the menu key to select the vertical direction is not only key to select the right direction. ]

Start sensitive command:

boot, chainloader, configfile, command, commandline, halt, kernel, pxe, quit, reboot

You can do the following in the menu list interface:

e: Edit the current boot menu items

b: Start the current menu item

c: enter the grub command line

p: enter password (if set)

You can do the following in the Edit menu item:

e: Edit the current row

d: Delete the current line

o: insert a new row below the current row

O: to insert a new row above the current row

b: Start the current menu

c: enter the grub command line

esc: Returns the grub menu list, cancel any changes made to the current menu item

[Note: The changes to the menu’s only temporary, only valid for this start]

At the command line you can do the following:

esc: Returns the grub menu list

In the menu list, you can press the number keys to select the menu, if you want to select a menu item 9 above, you can press the number key twice, for example, to select the first 25 menu items, you can press 2 and then press 5 (menu number from 0 began, that number is zero first menu).

==============================

iftitle [if exist (hd0,0) /bootmgr] start (hd0,0) in NT6.x

If [] the condition is TRUE then display the menu else do not display the menu

There must be no space after [ character or before ] character.

==============================

Before all menu items:

hiddenmenu 3

Does not display the menu list, use the menu item 3 start within the timeout time, press any key to display the menu list.

hiddenmenu –chkpass=0x5700

Does not display the menu list, use the default start menu items, within the timeout time press the F11 key to display the menu list.

[Note: If you do not know the key code can use pause –test-key command to get the function]

==============================

Used in menu items, or until all the menu items:

password password

Lock on the menu, look at the following example:

title menu title

password 123

commandline

To do this you need to enter the password menu 123

title menu title

password –md5 $1$JS/2$CKT61E11gzkdEKQnEpqjhS1

commandline

To do this you need to enter the password menu 123 (123 is the result of md5 password encryption)

timeout 10

default 0

password 123

Menu 1 title

commandline

Menu 2 title

commandline

Locking the entire menu list, the menu list is not locked after pressing the e key to edit, you can not press the c key to enter the command line, you can use these features unlocked at the menu list interface, press p key to enter the unlock password .

[Note: To get the md5 encoded string, you can perform md5crypt 123]

==============================

Used in the menu items:

lock

Lock the current menu, to enter after the need to unlock. Look at the following examples:

timeout 10

default 0

password 123

Menu 1 title

lock

commandline

Menu 2 title

commandline

Unlock the front, “Menu 1” can not be executed. After unlocking by pressing p and entering the password, “Menu 1” and “Menu 2” can be executed

==============================

Used in the command line:

md5crypt abc

Gets a string abc of md5 encoded.

==============================

Used in the menu items:

commandline

Grub4Dos enter the command line.

==============================

Before use all menu items:

gfxmenu /message

Use /message graphic menu

Because gfxmenu compatibility with Grub4Dos bad, so I do not recommend the use of

==============================

splashimage: display a bitmap or jpg.

Before use all menu items:

In vbe mode, you can use 24-bit color or 32-color BMP or JPG format (not XPM in latest versions) format picture as a background.

splashimage:splashimage [–offset=[type]=[x]=[y]] FILE

type: bit 7:transparent background

splashimage –fill-color=[0xrrggbb]

splashimage –animated=[type]=[duration]=[last_num]=[x]=[y] START_FILE

type: bit 0-3:times bit 4:repeat forever bit 5:wait time bit 7:transparent background type=00:disable

duration: [10] unit is a tick. [10:ms] units are milliseconds,

naming rules for START_FILE: *n.??? n: 1-9 or 01-99 or 001-999

hotkey F2,control animation: play/stop.

Load FILE as the background image when in graphics mode.

bmp or jpg can be compressed using gzip or grub4dos LZMA utility.

Progressive format JPEG files not supported (use MSPaint to re-save it). XPM no longer supported.

fill-color will fill the whole screen with a single rgb colour

For fastest animation – add bitmaps to a floppy.ima file and load to memory

map –read-only –mem /_ISO/DNA.ima (fd3)

map –hook

splashimage –animated=0x90=1=120=550=0 (fd3)/DNA_orbit_animated_frame_0001.bmp

==============================

color:color NORMAL [HIGHLIGHT [HELPTEXT [HEADING ]]]

Change the menu colors.

The color NORMAL is used for most lines in the menu, and the color HIGHLIGHT is used to highlight the line where the cursor points.

If you omit HIGHLIGHT, then the 0xf(4 bit) or 0xffffff(32 bit) is used for the highlighted line.

If you omit HELPTEXT and/or HEADING, then NORMAL is used.

The format of a color is “FG/BG”. FG and BG are symbolic color names.

A symbolic color name must be one of these: black, blue, green, cyan, red, magenta, brown, light-gray, dark-gray, light-blue, light-green, light-cyan, light-red, light-magenta, yellow and white.

  1. Assign colors by target, the order can not be messed up. The color can be replaced by a placeholder n.

e.g. color black/cyan yellow/cyan red/cyan light-green/cyan. (character color/background color, use symbol color.)

e.g. color 0x30 0x3e 0x34 0x3a. (high part=background color, low part=character color, 8 bit number.)

e.g. color 0x888800000000 0x888800ffff00 0x888800880000 0x88880000ff00. (64 bit number.)

e.g. color 0x30. (The rest is the same as NORMAL. Change the console color on the command line.)

e.g. color 0x30 0xe n 0xa. (Background color from NORMAL. placeholder n.)

  1. Can assign colors to a specified target. NORMAL should be in the first place.

e.g. color normal=0x888800000000. (The rest is the same as NORMAL.)

e.g. color normal=0x4444440000ffff helptext=0xc highlight=0xd heading=0xe border=0xa. (Background color from NORMAL.)

e.g. color standard=0xFFFFFF. (Change the console color.)

Before use all menu items:

color normal=0xFFFFFF highlight=0xFF0000

Set menu is not selected for the white, select the menu for the red

color heading=0x0000FF helptext=0x00FF00

Color information is provided in the top menu is blue, the color information of the Help menu is green

color standard=0xFFFFFF

Set the text color to white console

color border=0xFF00FF

Set menu border color magenta (VBE mode active)

color normal=0xFFFFFF highlight=0xFF0000 heading=0x0000FF helptext=0x00FF00 standard=0xFFFFFF border=0xFFFF00

All of the above and set the color

color 0xFFFFFF 0xFF0000 0x0000FF 0x00FF00 0xFFFFFF 0xFFFF00

All of the above and set the color (if the order is set, you can omit the state flag)

color 0xFFFFFF 0xFF0000

Set menu is not selected for the white, select the menu for the red (if the order is set, you can omit the state flag)

[Note: 0xFFFFFF represents the three colors red, green and blue values: 0xRRGGBB]

==============================

Before use all menu items:

outline on

Open the outline of a character display mode graphics mode.

outline off

Character outline closed graphics mode display mode.

outline

Character contour switch graphics mode display mode.

outline status

Character outline shows the current graphics mode display mode.

[Note: Since the background when the cause is unclear handwriting when you can try to open the show, it will get better display effect]

================================================== =========================================

 

PART 6 – CALL, EXIT, SHIFT, GOTO, SET, SETLOCAL, ENDLOCAL, IF, CHECKRANGE, ERRORCHECK, ERRNUM, FALLBACK, PAUSE, COMMAND, INSMOD, DELMOD

call :Label1  Parameter1 Parameter2 …

Go to the “Label1” line and execute lines below it

goto :eof returns, exit jumps to :eof

!BAT # Note: Header !BAT is necessary, which is used to identify a batch script Grub4Dos
# Save this file as \test.g4b, and then enter the grub4dos command line and type /test.g4b execute it
call :label1 Parameter1 Parameter2 Parameter3 Parameter4 Parameter5 Parameter6 && echo ok ! echo fail
call :label2 Parameter1 Parameter2 Parameter3 Parameter4 Parameter5 Parameter6 && echo ok ! echo fail
echo script end
exit

:label1
echo %1 %2 %3 %4 %5 %6 %7 %8 %9
exit 0

:label2
echo %1 %2 %3 %4 %5 %6 %7 %8 %9
exit 1

 

Label1 call and get the return value, the return value is displayed ok or fail

Label2 call and get its return value, the return value is displayed ok or fail

label1 always returns true

label2 always returns false

call can refresh the environment variables into a new environment, such as the following code:

iftitle [find –set-root –devices=h /bootmgr && call set bootmgr=%@root^%] load BOOTMGR of Windows VISTA /WIN7 /WIN2008 on %bootmgr%

If we do not use call –set-root does not take effect immediately.

Also note here that the entire command line is parsed before execution, parsing process, which will be replaced with the actual value of the variable. %@root^% wording is to prevent parsing command line when it is extended to the actual value, but to extend it to a string %@root%, so that the next time resolve to continue to expand. Time when the find –set-root –devices=h /bootmgr executed successfully, you need to perform && call set bootmgr=%@root^% (%@root^% at this time has been extended to %@root%) of , but also the implementation of a resolution, this time will be %@root% expands to the actual value.

==============================

exit

Jump to the script file: eof at (the end of the script file). Same function as goto: eof

==============================

shift

Batch-specific, discarding the first argument, the following parameters to move forward.

shift 3

Batch-specific, discarding the third parameter, the following parameters to move forward.

[Note: Grub4Dos can use only %1 to %9 parameters, so use shift to reach more than 9 parameters]

==============================

goto :label1

Batch files only, go to the “Label1” at the execution, does not return, do not support arguments. Max label length 8 characters.

Later 2018 versions may support goto if used under a menu title or iftitle entry and can use variable, e.g. goto :%RET%

Must always precede label with colon.

Max 128 labels per batch file.

goto 3

Go to the menu item and run immediately. Used in menu files only.

Must use errorcheck on (does not work if errorcheck off).

e.g.

errorcheck on

goto 3

goto +1

Go to the next menu entry (can use -n or +n)

==============================

set

variable names max 8 characters

set a=123

Setting a value of a string variable 123

set /a a=123

Setting a value of decimal integer variable 123

set /A a=123

Set the variable a hexadecimal integer value 0x7B

set /a a=123 + 4

Setting variables a decimal integer value 127 (refer to calc command)

set /A a=123 + 4

Set the variable a hexadecimal integer value 0x7F (refer calc command)

set a

Show the value of a variable

set a =

To delete a variable

set *0x8280=0x80

Set integer value at memory address 0x8280 0x80

set

A list of all the variables listed

set *

clears all variables

set * && set fred=%fred%

clears all variables except fred

set a=abcdef

set len_a =%@retval%

%@retval% length by taking the last set of variables

set a=abcdef && set /a len_a=*0x4cb00

Length *0x4cb00 same as @retval – use %@retval% for future compatibility

[Note: The variable name up to eight characters, variable content of up to 512 bytes, only 60 variables can be set]

set /p ask=Please enter a word :

prompt for input

set /p:3 ask=Please enter a word within 3 seconds :

prompt for input, with timeout

==============================

setlocal and endlocal

Variables and endlocal setlocal between local variables, see the following examples:

set a=123

setlocal

set a=4

echo %a%

endlocal

echo %a%

endlocal between setlocal and assigned to a 4, but this does not affect the variable before setlocal set a, after endlocal, a recovery value of the variable before 123.

setlocal @ and endlocal @

Variables and endlocal setlocal between local variables, setlocal @ and endlocal @ across script file exists.

[Note: setlocal @ setlocal will fail before, setlocal setlocal @ After cross-script. ]

endlocal && set fred=%fred% && set doris=%doris%

sets fred and doris after endlocal

==============================

if #%a%==#123 echo ok

If the value of a variable equal to 123 output ok

if #%a%<=#123 echo ok

If the variable is equal to a value of less than 123 output ok

if #%a%>=#123 echo ok

If the variable is equal to a value greater than 123 output ok

Note: if 0f>=0g echo ok does not work correctly, when comparing strings or numbers+strings, ensure first character begins with a non-numerical character – e.g. #0f>-#0g

if #%a%>=#abc echo ok

If the value of a variable equal to the output string abc ok (case-sensitive)

if /i #%a%>=#abc echo ok

If the value of a variable equal to the output string abc ok (ignoring case)

if #%a%==# echo ok

If the variable a value is empty then the output ok

if #%a% == # 123 && echo ok

If the value of a variable equal to 123 output ok

if #%a%==#123 || echo fail

If the variable is not equal to a value of 123 outputs fail

if not #%a%==#123 echo fail

If the variable is not equal to a value of 123 outputs fail

if exist a echo ok

If there is a variable output ok

if not exist a echo fail

If there is a variable output fail

if exist /grldr && echo ok ! echo fail

If the file /grldr output ok, otherwise the output fail

Determine the existence of a file or directory on the drive is invalid, for example (ud) /:

if exist /FILE && echo file or directory exists ! echo the file or directory does not exist

Determine whether a file exists: (may not work on all filesystem!)

cat –length=0 /FILE && echo file exists ! echo file does not exist

Determine whether there is a directory on the drive is invalid, for example (ud) /:

cat –length=0 /FILE && echo directory does not exist || if exist /FILE && echo directory exists! echo directory does not exist

==============================

checkrange range command && success ! failure

If the “order” of the return value in the “range” then “success”, otherwise “failure.”

checkrange 23 calc 20 + 3 && echo ok! echo fail

If the value of 20 + 3 is in range of 23, the output ok, otherwise output fail

checkrange 0x21,0x23,0x80 read 0x8280 && echo ok ! echo fail

If you read from 0x8280 a value of 0x21 or 0x23 or 0x80 then output ok, otherwise output fail

checkrange 0:100 calc %a% && echo ok ! echo fail

If the variable is a value between 0-100, the output ok, otherwise output fail

==============================

errorcheck on

Open the error checking, error is encountered terminates execution

errorcheck off

Close the error checking, error encountered in the implementation will be ignored until it is finished

errorcheck

Switching error checking mode

errorcheck status

Displays the current error checking mode

[Note: errorcheck command controls whether the error is processed. Errorcheck is enabled by default, that is, when an error occurs command script will stop executing. If errorcheck is off, the script has been executed to boot command (ie under the off state, fallback commands will fail). A boot command to check into the wrong turn]

==============================

errnum

Returns an error code on a command. If the command is not an error, it returns an error code of 0, otherwise it returns an appropriate error code.

==============================

fallback 3

If the current menu item execution error, then transferred to the third menu item to proceed. This command is only used in the menu for unattended boot mode: If the menu item execution error, without waiting for the user to operate, immediately jump to the first three menu items continue to default.

==============================

pause

returns TRUE if a key is pressed or FALSE if ESC is pressed

pause Press any key to continue && echo A key was pressed ! echo ESC was pressed

pause press any key to continue

Continue to run the command after a pause, and give some message, press any key.

pause –wait=10 press any key to continue

Continue to run the command after a pause, and give some message, press any key. If you do not press any key within 10 seconds, then automatically return to the command line.

pause –test-key

After executing the command, press any key to display the scan code.

pause && set /a key=*0x4CB00 ! set key =

Pause command to run, after pressing any key to continue, and the keys are stored in the variable key in ASCII code. If you press the ESC key, then delete the variable key. 0x4cb00 is BIOS data area location of last key press.

==============================

command

Displays the current location specified external command

command –set-path=/boot /grub

Specify the location of external commands /boot /grub

command RUN /pe.iso

Find RUN and execute external commands, parameters /pe.iso

command /boot /RUN /pe.iso

Execute external commands /boot /RUN, the parameters for /pe.iso

[Note: Look for an external command sequence is as follows: If is ‘(‘ or ‘/’ at the beginning of the file is considered to be an absolute file path, otherwise it will be directly executed

Find command insmod loads then look in the current directory. the same name. then find –set-path file specify the location of the same name.]

insmod RUN

RUN command to load external memory, making reads from memory when executing external commands directly, instead of reading from the source device, faster execution.

insmod FILE.MOD

FILE.MOD is generated by using external command makemod collection, eliminating cumbersome multiple use insmod to load an external command. You can also use the tool to create FILE.MOD Fbinsttool file.

insmod /boot/grub/fat.gz fat

The external command fat.gz loaded into memory, and specify the new name as fat, then you can directly use the fat to call this external command.

[Note: insmod to load the file, the file name length must not exceed 11 characters. ]

==============================

delmod

Display loaded external command

delmod RUN

Unload loaded external command RUN

delmod *

Unload all loaded external command

delmod -l %~nx0 > nul || insmod %0 > nul

Determine whether the current script has been loaded into memory, if not, then it is loaded into memory.

=========================================================================================

 

PART 7 – HELP, DEBUG, DISPLAYMEM, GEOMETRY, IS64BIT, SERIAL, TPM, SETKEY

help

Display a list of internal commands

help –all

Display a list of all commands

help root

Root command displays help information

==============================

debug off or debug 0

Turn on silent mode

debug normal or debug 1

Open standard mode

debug on

Turn on verbose mode, from debug 2 to debug 0x7fffffff are equivalent to (please use the debug report BUG this mode, you can get more detailed information) debug on

debug -1

Hide Countdown Tips – e.g. with pause command

debug 3

Open the batch script debugging mode (single step), debug mode under 3 Press c to enter the command line, press Ctrl + c key combination can suspend execution of the script.

debug BATCHFILE PARAM1 PARAM2 PARAM3 etc.

debug the grub4dos batch file BATCHFILE. Can single-step, skip over, exit to command shell, etc.

Also, debug msg=N where N=0 (no message), 1 (stdout), 2 (errout) 3 (stdout+errout debug)

Also, debug BATCHFILE ARG1 ARG2 ARG3 …

for single-stepping batch files: e.g. debug /test.g4b fred doris

==============================

displaymem

GRUB judged show the current memory distribution system, including all physical memory area.

Later versions show (example):

Usable RAM (HEX): 0+4F8 800+6DF2D0 800000+2A0000

Numbers are hex 512-byte sectors: Usable memory in 3 chunks, starts at 0 for 4F8 sectors, then start at sector 800 for 6DF2D0 sectors, then starts at 800000 for 2A0000 sectors

Chunk #1 is 4F8*200 = 9F000 or 651,264 bytes in size, chunk #2 starts at 800*200 = 1MB and is DBE5A000 or 3689MB in size, chunk #3 starts at 4295MB and is 54000000 or 1409MB in size – so system has approx 6GB of RAM.

==============================

geometry (hd0)

Output (hd0) information.

==============================

is64bit

bit 0 set = 64-bit

bit 1 set = PAE

Returns 0 or 1 if 32-bit, 2 or 3 if 64-bit CPU

checkrange 0,1 is64bit && echo 32-bit

checkrange 1,3 is64bit && echo PAE supported

checkrange 0,2 is64bit && echo PAE not supported

==============================

serial

Initialize a serial device. Serial port, not research.

==============================

tpm –init

512 bytes of data as initialization TPM (Trusted Platform Module) cache 7C00 at: 0000 in the address. Do not have access, not research.

==============================

setkey NEW_KEY USA_KEY

Pressing the USA_KEY produces the NEW_KEY.

e.g. setkey 9 1 – displays 9 if press 1 key

setkey 9 exclam – displays 9 if ! key pressed

setkey 9 at – displays 9 if @ key pressed

[Note: This key must be letters, numbers, and the following special keys: escape (escape), exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%), minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), ctrlbackspace, tab (Tab), bracketleft ([), braceleft ({), bracketright (]), braceright (}), enter (carriage return), semicolon (;), colon (:), quote (‘) , doublequote (“), slash (/), backquote (`), tilde (~), backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?), space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F10, shiftF1-shiftF10, ctrlF1-ctrlF10.

Later versions (2019-05+) Add A for Alt+ codes, e.g. Aa-Az, A0-A9, Aequal, etc., also oem102 and shiftoem102 for the extra key on 102-key kbd.

setkey greater oem102

setkey less shiftoem102

setkey at Av

 

NEW 0.4.6A 2019-12-26 COMMANDS (SETMENU, BEEP)

=============

setmenu

Controls menu size and behaviour

setmenu:setmenu –parameter | –parameter | …

–ver-on* –ver-off –lang=en* –lang=zh –u (clear all)

–left-align* –right-align –middle-align

–auto-num-off* –auto-num-all-on –auto-num-on –triangle-on* –triangle-off

–highlight-short* –highlight-full –keyhelp-on* –keyhelp-off

–font-spacing=FONT:LINE. default 0

–string[=iINDEX]=[X|s|m]=[-]Y=COLOR=”STRING”

iINDEX range is i0-i15. Auto-increments if =iINDEX is omitted.

If the horizontal position is ‘s’, “STRING” centers across the whole screen.

If the horizontal position is ‘m’, “STRING” centers within menu area.

-Y represents the count from the bottom.

“STRING”=”date&time=FORMAT” will update date FORMAT every second.

e.g. “date&time=MMM.dd.yyyy HH:mm:ss”

e.g. “date&time=dd/MMM/yy AP hh:mm:ss”

“STRING”=”date&time” ISO8601 format. equivalent to: “date&time=yyyy-MM-dd HH:mm:ss”

–string= to disable all strings.

–string=iINDEX to disable the specified index.

–box x=X y=Y w=W h=H l=L

If W=0, menu box in middle. L=menu border thickness 0-4, 0=none.

–help=X=W=Y

X=0* menu start and width. X<>0 and W=0 Entire display width minus 2x.

–keyhelp=Y_OFFSET=COLOR

Y_OFFSET=0* entryhelp and keyhelp in the same area,entryhelp cover keyhelp.

Y_OFFSET!=0 keyhelp to entryhelp line offset.two coexist.

Y_OFFSET<=4, entryhelp display line number.

COLOR=0* default ‘color helptext’.

–timeout=X=Y=COLOR

X=Y=0* located at the end of the selected item.

COLOR=0* default ‘color highlight’.

–graphic-entry=type=row=list=wide=high=row_space START_FILE

type: bit0:highlight bit1:flip bit2:box bit3:highlight background

bit4:Picture and text mixing bit7:transparent background.

Naming rules for START_FILE: *n.??? n: 00-99

–draw-box=INDEX=START_X=START_y=HORIZ=VERT=LINEWIDTH=COLOR.

LINEWIDTH:1-255; all dimensions in pixels. INDEX range is 0-15.

–draw-box=INDEX to disable the specified index. –draw-box= to clear all indexes.

Note: * = default. Use only 0xRRGGBB for COLOR.

“entryhelp” is the menu help text displayed when a menu entry is highlighted – e.g. title xxxx\nEntryyhelp line 1\\nEntryhelp line2

“keyhelp” is the default grub4dos help text displayed when the menu entry does not contain a \n string – e.g. title xxxxxx – user key help is then displayed ‘ e.g. Use ^ and v to highlight and entry, Press ENTER or ‘b’ to boot. Press ‘e’ to edit… etc.’

2018-03 and later

–string=[X]=[-]Y=COLOR=”STRING” No X indicates horizontal centering. -Y means count from the bottom of the menu. -0 is the last line.

2018-06-28 and later

setmenu –middle-align will centre all menu entries and help text

setmenu –box l=0 removes numbers and highlighted space at left of menu

2019-08-08 and later

setmenu –string=x=y=color=”date&time=FORMAT” – updates every second on menu. Replaces any of dd MM MMM yyyy hh HH mm ss AP, where MM = two digit month, MMM = three letter month (e.g. Aug), HH = two digit 24-hour, hh = two digit 12-hour, AP = AM or PM – e.g. setmenu –string=67=0=0xffffff=”date&time=[Date=dd/MM/yyyy Time=HH:mm:ss] or –string=71=0=0xffffff=”date&time=[dd-MMM-yyyy hh:mm:ss AP]”. Can permanently disable date&time using –string=date&time or any string using –string=INDEX

2019-09-09 – keyhelp-off and keyhelp–on added

==================

beep

2018-06 and later – play tones [Frequency Hz] [Duration ms]

beep [–start|–mid|–end] [–play=N] [–nowait] FREQUENCY DURATION FREQUENCY DURATION …

FREQUENCY: Hz. DURATION: ms. Max: 126 notes per command.

N: 0-255. 0 is stop play, 255 is continuous play (any key stops play).

When the syllable is a lot, can be written in different lines.

The use of [–start|–mid|–end] specifies parts of the same tune.

beep 200 500 0 100 300 500

beep –nowait –play=3 200 500 0 100 300 500 0 200

beep –start 330 440 330 220 392 220 440 220 522 220 522 220 440 220 392 440 393 220 440 220 392 880

beep –mid 330 440 330 220 392 220 440 220 522 220 522 220 440 220 392 440 392 220 440 220 392 880

beep –mid 392 440 392 440 392 440 330 220 392 220 440 440 440 440 392 880

beep –end –play=255 –nowait 293 660 330 220 261 220 293 220 261 220 220 220 196 1320

================================================== ========================================

 

PART 8 – BATCH FILES AND NOTES

About !, &&, ||, ;; , & ;, |;

usage:

command1 && command2 ! command3

If command1 is executed successfully execute command2, otherwise execute command3

command1 || command2 ! command3

If command1 fails, then execute command2, otherwise execute command3

command1 ;; command2 ;; command3

Three commands are executed sequentially refreshed after;; environment variable. Equivalent to the following wording:

command1

command2

command3

command1 &; command2

If command1 is executed successfully execute command2, &; then will refresh the environment variables. Can not! Simultaneously.

command1 |; command2

If command1 fails, then execute command2, |; then will refresh the environment variables. Can not! Simultaneously.

command1 && command2 || command3

If command1 is executed successfully, execute command2 || command3, nothing else to perform.

command1 && command2 || command3 ! coommand4

If command1 is executed successfully, execute command2 || command3, otherwise execute command4.

(Execute command2 || command3 period, if command2 fails to perform command3, otherwise execute command4)

In short: If you can not be successfully executed to perform the command4 command3

command1 &; command2 ! command3

Incorrect use, command3 never be executed

If command1 is executed successfully execute command2 ! Command3, nothing else to perform.

command1 |; command2 command3!

Incorrect use, command3 never be executed

If command1 fails, then execute command2! Command3, otherwise nothing execution.

Tips:

If you find abc in /FILE, then set the Last to the position last found, otherwise it is set Last to -1:

set Last=-1 && cat –locate=abc /FILE &; set Last =%?%

If you find abc in /FILE, the setting for the position of First found first, otherwise it is set First to -1:

set First=-1 && cat –locate=abc –number=1 /FILE &; set First =%?%

=====================================================================================

About Pipeline Operation:

command1 | command2 | command3

The data output of command1 command2 as input, output data command2 as command3 input.

command1 > /FILE

Command1 output data will be written to /FILE in, /FILE any original data will be cleared.

command1 >> /FILE

Command1 will append data to the end of the output /FILE’s, /FILE any original data is not affected.

Example:

echo -n 1 | echo -n 2 | echo -n 3

Equivalent

echo -n 21 | echo -n 3

Equivalent

echo -n 321

echo -n abc > /test

The file /test the contents emptied, and write abc. File /test must exist and be > 1K if on NTFS filesystem

echo -n abc >> /test

Appended to the end of the abc /test for.

> >> And && conjunction:

echo 1 > /test && echo 2 >> /test && echo 3 >> /test && cat /test

> >> And && || conjunction:

if 1==1 && echo 111 > /test && if 1==2 || echo 222 >> /test && if 3==3 && echo 333 >> /test && cat /test

| And && conjunction:

set /aa=1 | echo -n && set /ab=2 | echo -n && set /ac=3 | echo -n

=====================================================================================

About batch scripts:

Batch script file must begin with! BAT to.

Batch script can exit by exit or exit a call to call, exit can return an exit code, such as exit 1

Batch script or call call can accept parameters:

%0 is the command itself

%* On behalf of all parameters (not including 0%)

%1-%8 represents the first one to the first eight parameters

%9 represents all remaining parameters

You can use the shift discard parameter, the default discard the first argument, you can pre-shift 6 dropped six parameters. The remaining parameters will move forward.

%~d1 get the first argument disk number.

%~p1 gets the first argument path.

%~n1 gets the first parameter file name.

%~x1 get the first parameter file extension.

%~f1 gets the first argument the full file path (equivalent to %~dpnx1).

%~z1 get the first parameter file size.

In a batch script if multiple consecutive % when executed will first replaced by a two percent (does not replace the command line):

set /a n=%a%%%b% when executed, would be replaced by set /a n=%a%%b%

Then will expand the variables a and b values of variables, when used in conjunction with a number of variables need to pay attention.

Allows the use of Ctrl + C trap runtime batch execution.

================================================== ========================================

Interception on a string variable:

set a=ABCDabcd1234

echo %a:~0%

0 + 1 from the beginning of the interception to the last character (ABCDabcd1234), equivalent% a%

echo %a:~0,2%

Start Capture from 0 + 1 characters, only interception of the next two characters (AB), the equivalent of% a: ~, 2%

echo %a:~0,-2%

Start Capture from 0 + 1 characters, intercepted two characters before the penultimate (ABCDabcd12), equivalent% a: ~, -2%

echo %a:~4%

4 + 1 from the beginning of the interception to the last character (abcd1234)

echo %a:~4,2%

4 + 1 from the first character start interception, interception followed only two characters (ab)

echo %a:~4,-2%

Start Capture 4 + 1 from the first character, the interception of the penultimate two characters before (abcd12)

echo %a:~-4%

The first four characters from the beginning of the countdown to the final interception (1234)

echo %a:~-4,2%

The first four characters from the beginning of the countdown to intercept only interception of the next two characters (12)

echo %a:~-4,-2%

Start Capture from the penultimate four characters, intercepted the penultimate two characters before (12)

echo %a:~-4,8%

Start Capture from the penultimate four characters, only eight characters followed by interception (1234), the absence of so many characters for the interception, so only four interception.

================================================== ========================================

About internal variables:

%@retval%: Save the last command returns the value (i.e. the value at 0x4CB00 in grub4dos memory)

if 1==1 ;; echo %@retval%

Return 1 represents true (non-zero value represents true)

if 1==2 ;; echo %@retval%

Return 0 for false

calc 100-1 > nul ;; echo %@retval%

The results returned 99

set a=abcdef ;; echo %@retval%

Return variable length 6

%?_ UUID%: run uuid command to get to the UUID value (same as %?% and is temporary) 

uuid (hd0,0) > nul ;; echo %?_UUID%

Output (hd0,0) UUID value

%?_BOOT%: Save the initial boot device device number

echo %?_BOOT%

If you boot from the CD, then the output (cd), if you start from the ud, outputs (ud)

%@root% : Save the current device number for

root (hd0,0) ;; echo %@root%

%@path% : Find a path to save the external command

command –set-path=/BOOT /;; echo %@path%

%@date%: Get the current date

echo %@date%

%@time%: Get the current time

echo %@time%

%@random%: Get a random number

echo %@random%

%?% : Special variable, mean different things in different places

cat --locate=abc /FILE

echo %?%

The output of the last position abc found

map /Floppy.img (fd0)

map --status=0

echo %?%

Output (fd0) starting sector 0x3D88A7

map –status=0

echo %@retval%

Output (fd0) the size of the 2880 (sectors)

Some fixed memory addresses:

(if 4 bytes use & 0xFFFFFFFF – only shown on first two entries below)

set /A G_NBOOTP=*0x8208 & 0xFFFFFFFF –  4 bytes (double word) boot partition number install_partition (the boot partition)

set /A G_NBOOTD=*0x8280 & 0xFFFFFFFF –  4 bytes (double word) to start the drive number (boot_drive)

set /A G_NROOTP=*0x829C 4 bytes (double word) the current root partition number (current root partition)

set /A G_NROOTD=*0x82A0 4 bytes (double word) current root drive number (current root drive)

set /A G_NCD=*0x82C8 4 bytes (double word) CDROM drive number

set /A G_NRD=*0x82CC 4 bytes (double word) rd device drive number

set /A G_RDBASE=*0x82D0 8 bytes (ie four words) rd device’s physical base address

set /A G_RDSIZE=*0x82D8 8 bytes (ie four words) rd device size (in bytes)

set /A G_LFSIZE=*0x8290 8 bytes (ie four words) last accessed the file size (which is the implementation of “cat –length=0” after the file size)

set /A G_LPSS=*0x82A8 8 bytes (ie four words) starting sector number of the last visit of the partition

set /A G_LPSC=*0x82B0 8 bytes (ie four words) last visited partition total number of sectors

set /A G_VER=*0x8278 4 bytes (double word) GRUB4DOS date compiled a decimal number.

set /A G_IS64=*0x82BC 4 bytes (double word) to detect whether the CPU supports 64

set /A G_ISFB=*0x82B8 4 bytes (double word) to determine whether the fb start

set /A G_FREEM=*0x8298 4 bytes (double word) available extended memory size (in KB)

set /A G_PXECIP=*0x8284 4 bytes (double word) pxe client ip (ie local ip)

set /A G_PXESIP=*0x8288 4 bytes (double word) pxe server ip

set /A G_PXEGW=*0x828C 4 bytes (double word) pxe gateway ip

set /A G_AUTOM=*0x8274 4 bytes (double word) menu automatically numbered (for dynamic menus)

set /A G_AUTOMS=*0x8275 4 bytes (double word) to enable automatic numbering menu using the menu and automatic numbering between delimiters

set /A G_GZIP=*0x82A4 4 bytes (double word) Unzip sign (gzip non-automatic decompression), does not automatically extracting non 0:00

set /A G_SMH=*0x82C0 4 bytes (double word) saved_mem_higher

Some implications of fixed memory address (remove instructions section below):

set /A G_NBOOTP=*0x8208

set /A G_NBOOTD=*0x8280

set /A G_NROOTP=*0x829C

set /A G_NROOTD=*0x82A0

set /A G_NCD=*0x82C8

set /A G_NRD=*0x82CC

set /A G_RDBASE=*0x82D0

set /A G_RDSIZE=*0x82D8

set /A G_LFSIZE=*0x8290

set /A G_LPSS=*0x82A8

set /A G_LPSC=*0x82B0

set /A G_VER=*0x8278

set /A G_IS64=*0x82BC

set /A G_ISFB=*0x82B8

set /A G_FREEM=*0x8298

set /A G_PXECIP=*0x8284

set /A G_PXESIP=*0x8288

set /A G_PXEGW=*0x828C

set /A G_AUTOM=*0x8274

set /A G_AUTOMS=*0x8275

set /A G_GZIP=*0x82A4

set /A G_SMH=*0x82C0

==============================================

Is recommended not to use the command:

setvbe: usefulness, could face elimination.

background, foreground: only valid in vga mode and Grub4Dos vga mode is not recommended, but recommended vbe mode.

fstest: developer testing, most people do not have access

gfxmenu: not Grub4Dos management, compatibility with Grub4Dos bad, it is recommended not to use, and the use Grub4Dos recommended vbe mode.

serial: serial, early eliminated.

==============================

Memory usage rules:

User can use (md)0x300-(md)0x3DF, or (md)0x1F40-(md)0x3FFF for larger area (approx. start at 4 up to 8M)

==============================

Improve the success rate of the method to start:

Ud make a boot disk with fbinst, fbinst can guarantee a high success rate of start.

Formatting fbinst, let grldr and menu.lst first put ud area, other documents on the back

The following quote “no point” in the words:

The reason to read the disk failure are:

1, if there is no use grldr.mbr but directly using the partition boot code, then, due to the partition boot code no ability to automatically adapt the CHS, therefore, occurs in the case of BPB CHS can not match the motherboard BIOS CHS, and this may lead to int13 read the disk failure or crash. If a PBR boot code does not use “geometry detection and adaptive” approach, it must be placed in exactly the right BPB H and S values, to ensure that the motherboard BIOS and identified by H, S exactly the same value, which . Otherwise, there have disk error (or simply crash).

  1. If you use grldr.mbr, it is still possible situation CHS mismatch occurs, it is because, grub4dos “automatic detection of CHS” function does not guarantee 100% success. Really can guarantee 100% success is fbinst. Since CHS There may not be accurate, then this will be due to a result of the instruction execution INT13 disk error (or simply crash).

Under 3, at CHS guaranteed to match the motherboard BIOS completely correct the situation, if the GRLDR placed rearward position, beyond the ability to access the motherboard BIOS int13, in which case there will be disk error (or simply crash).

4, in the motherboard BIOS supports LBA mode, this is the first three are similar. That is, if the GRLDR placed rearward position, beyond the ability to access the motherboard BIOS int13, in which case there will be disk error (or simply crash).

If I am not mistaken, this 4 above, if that is the start of all the possibilities for failure.

So, if you want your common U disk, (currently) the only software you can use is fbinst. If you do not consider the general question, then you can set your own BPB, H and S (matching your motherboard BIOS) to make your machine successfully started.

1, parsing the “File Manager” batch script

This example code reference smine users:

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=203607

smine spent two script files FileList and OpenFile, I am here to merge into a script file FileList.

Usage: The following script (content between +++++) saved as FileList file (UTF-8 format, stored in the default path for external commands),

and then at the command line or FileList FileList /DirPath /can.

Fixes some BUG, adds some usage:

FileList (ud)/

FileList (ud)

FileList /grldr

FileList grldr

FileList g

FileList /Boot/

FileList B

FileList /

FileList

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

! BAT

# Enable redundant mode, the ability to capture the error message

debug on

# Detection Grub4Dos version

checkrange 20110918:!-1 read 0x8278 > nul || echo Please use grub4dos-0.4.5b-2011-09-18 or above && exit 1

# Load this module, easy call

delmod -l FileList > nul || insmod %0 FileList > nul

# Used to save “file list” profile

set CfgList=(md)0x60000+0x100

# Used to hold “open” configuration file

set CfgOpen=(md)0x60100+0x100

# Used to store temporary data

set TmpFile=(md)0x60500+0x100

#Path To list

set FL_Param=%~f1

# Separate directory and file name

set FL_Path=%~dp1

set FL_File=%~nx1

 

# Enable page display mode (debug 3 debugging)

pager on

# Search for files and directories takes time, here are tips

clear

echo -e is entering the directory: %FL_Path% …

# Call the sub-processes: Create a “file list” configuration file

call :GreateCfgList

# Call the sub-processes: create “open” configuration file

call :GreateCfgOpen

# Execution profile

configfile %CfgList%

#End script

exit

#============================================================

# Create a “file list” configuration file

:GreateCfgList

         # Call the sub-processes: initialization profile

         call :InitCfgList

         # Call the sub-processes: Create a “title” menu item

         call :TitleMenu

         # Call the sub-processes: Create a “return to a” menu item

         call :UpMenu

         # Call the sub-processes: Create a “drive or file list” menu item

         if exist FL_Path && call :ListFile ! call :ListDrive

         exit

 

# Initial configuration file

:InitCfgList

         echo debug off > %CfgList%

         echo default 1  >> %CfgList%

         echo timeout 60  >> %CfgList%

         # Add a blank line

         echo >> %CfgList%

exit

# Create a “title” menu item

: TitleMenu

         # Write a menu item (title) to the configuration file (there may be an escape character FL_Path in)

         if exist FL_Path && echo -e title in the current directory: %FL_Path% >> %CfgList% ! echo title drive list:  >> %CfgList%

         # Menu commands: to re-enter the current directory

         echo command FileList %FL_Param% >> %CfgList%

         # Add a blank line

         Echo >> %CfgList%

exit

# Create a “return to a” menu item

: UpMenu

         # Write to the configuration file of a menu item (return to previous)

         echo title [..]  >> %CfgList%

         # For the list of disks, the return on a return to the main menu is (configfile to be on a separate line, otherwise there is no start-sensitive menu command, not up and down to select)

         if not exist FL_Path echo -e write 0x307FF8 1 \r\nconfigfile >> %CfgList% && exit

         # For the file or directory, it must obtain the name of the parent directory

         call :GetUpDir %FL_Path%

         # Build menu command (on a return)

         echo command FileList %FL_UpDir%  >> %CfgList%

exit

# According to the parameters to obtain the parent directory, the result is stored in the variable FL_UpDir

: GetUpDir

         # If the path is only a backslash, you deal directly with

         if ‘%1’== ‘/’ && set FL_UpDir= && goto GU_Clear

         # The path to be processed is stored %TmpFile%, in order to deal

         echo -n %1 > %TmpFile%

         # Get the last slash in the path location (LastS: LastSlash)

         set LastS=-1 && cat –locate=/ %TmpFile% > nul &; set /a LastS=%?%> nul

         # If the path is not a slash, then deal directly

         if %LastS%== – 1 && set FL_UpDir=&& goto GU_Clear

         # Get the path location of the last character (LastC: LastChar)

         set LastC=-1 && cat –locate=\x00 –number=1 %TmpFile% > nul &; set /a LastC=%?%- 1 > nul

         # If a slash at the end, then remove the last slash

         if %LastS%==%LastC% && cat –length=%LastS% %TmpFile% > %TmpFile%

         # Get the last slash in the path location

         set LastS=-1 && cat –locate=/ %TmpFile% > nul &; set /a LastS=%?% > nul

         # Delete content after the last slash, access path to the parent directory

         if not %LastS%==-1 set /a LastS=%LastS% + 1 > nul

         ! if %LastS%==-1 && set FL_UpDir=cat –length=%LastS%% TmpFile% | set FL_UpDir=

# Clean up temporary data

:GU_Clear

         set LastC=

         set LastS=

exit

# Create a list of disks

:ListDrive

         # List the list of disks (under debug off state, find the disk list command can not be listed)

         debug on

         find –ignore-floppies > %TmpFile%

         # Disk space-separated list

         cat –locate=\r –replace=\x20 %TmpFile% > nul

         cat –locate=\n –replace=\x20 %TmpFile% > nul

         # Build menu, according to the list of disks (from the command-line parsing function to handle the extra spaces)

         cat %TmpFile% | call :ProcessDrive

exit

# Generate a disk menu

:ProcessDrive

         # Get the name of the disk you want to generate the menu

         set CurDrv=%1

         # Discard the first argument to a parameter when processing the next cycle under

         shift

         # Parameter processing is completed, exit the loop

         if not exist CurDrv goto :PDR_Clear

         # Determine whether the disk name in parentheses

         if not ‘%CurDrv:~,1%’== ‘(‘ && goto :ProcessDrives

         if not ‘%CurDrv:~-1%’== ‘)’ && goto :ProcessDrives

         # Write the menu title

         echo title %CurDrv% >> %CfgList%

         # Write the menu command

         echo command FileList %CurDrv%/ >> %CfgList%

         # Write a blank line

         echo >> %CfgList%

         # Continue to cycle

         goto :ProcessDrive

# Clean up temporary data

:PDR_Clear

set CurDrv=

exit

# Create a directory and file list (catalog columns in front, files are listed in the post)

:ListFile

         # Clear %TmpFile%, ready to write the file name circulating

         echo -n > %TmpFile%

         # List files and directories in the current directory, and the directory in which the processing section, part of the file will be saved in %TmpFile%

         ls %FL_Param% > nul && ls %FL_Param% | call :ProcessDir

         # Handle file section

         cat %TmpFile% | call :ProcessFile

exit

# Create a directory menu

 :ProcessDir

         # Get the current filename

         set CurFile=%1

         # Discard the first argument to a parameter when processing the next cycle under

         shift

         # Parameter processing is completed, exit the loop

         if not exist CurFile goto :PD_Clear

         # Get the absolute path to the file

         set FullPath=%FL_Path%%%CurFile%

         # If the file type is a file, not a directory, go to :The Executive Office PD_MarkFile

         cat –length=0 %FullPath% > nul && goto :PD_MarkFile

         # Write the menu title

         echo title [%CurFile%]  >> %CfgList%

         # Write the menu command

         echo command FileList %FullPath%/ >> %CfgList%

         # Write a blank line

         echo >> %CfgList%

         # Continue to cycle

         goto :ProcessDir

 # Note of the file name, so that the code behind to continue processing

:PD_MarkFile

         # The file name is written %TmpFile% in

         echo -e \x20 >> %TmpFile%

         echo %CurFile% >> %TmpFile%

         # Continue to cycle

         goto :ProcessDir

         # Clean up temporary data

:PD_Clear

         set CurFile=

         set FullPath=

exit

# Generate a file menu

 :ProcessFile

         # Get the current filename

         set CurFile=%1

         # Discard the first argument to a parameter when processing the next cycle under

         shift

         # Parameter processing is completed, exit the loop

         if not exist CurFile goto :PF_Clear

         # Get the absolute path to the file

         set FullPath=%FL_Path%%%CurFile%

         # Write the menu title

         echo title %CurFile% >> %CfgList%

         # Write the menu command

         echo set FL_Open=%FullPath% >> %CfgList%

         echo configfile %CfgOpen% >> %CfgList%

         # Write a blank line

         echo >> %CfgList%

         # Continue to cycle

         goto :ProcessFile

# Clean up temporary data

:PF_Clear

         set CurFile=

         set FullPath=

exit

#============================================================

# Create the “Open” configuration file

:GreateCfgOpen

         # Call the sub-processes :initialization profile

         call :InitCfgOpen

         # Call the sub-processes :Creating the “Open” menu item

         call :CreateOpenMenu

exit

# Initialize “open” configuration file

:InitCfgOpen

         echo debug off > %CfgOpen%

         echo default 0  >> %CfgOpen%

         echo timeout 60  >> %CfgOpen%

         # Add a blank line

         echo >> %CfgOpen%

exit

# Generate the “Open” menu item

 :CreateOpenMenu

         echo title to load the disc image and start >> %CfgOpen%

         echo echo -e Loading :%FL_Open^% … >> %CfgOpen%

         echo map %FL_Open^% (0xff) >> %CfgOpen%

         echo map –hook >> %CfgOpen%

         echo chainloader (0xff) >> %CfgOpen%

         echo >> %CfgOpen%

         echo title loaded disc image into memory and start >> %CfgOpen%

         echo echo -e Loading :%FL_Open^% … >> %CfgOpen%

         echo map –mem %FL_Open^% (0xff) >> %CfgOpen%

         echo map –hook >> %CfgOpen%

         echo chainloader (0xff) >> %CfgOpen%

         echo >> %CfgOpen%

         # Blank line

         echo -e title \x20 >> %CfgOpen%

         echo clear >> %CfgOpen%

         echo >> %CfgOpen%

         # Floppy disk load must (fd0), or may fail to start

         echo title and start loading the floppy image >> %CfgOpen%

         echo echo -e Loading :%FL_Open^% … >> %CfgOpen%

         echo map %FL_Open^% (fd0) >> %CfgOpen%

         echo map –hook >> %CfgOpen%

         echo rootnoverify (fd0) >> %CfgOpen%

         echo chainloader (fd0)+1 >> %CfgOpen%

         echo >> %CfgOpen%

 

         # Floppy disk load must (fd0), or may fail to start

         echo title floppy image is loaded into memory and start >> %CfgOpen%

         echo echo -e Loading :%FL_Open^% … >> %CfgOpen%

         echo map –mem %FL_Open^% (fd0) >> %CfgOpen%

         echo map –hook >> %CfgOpen%

         echo rootnoverify (fd0) >> %CfgOpen%

         echo chainloader (fd0)+1 >> %CfgOpen%

         echo >> %CfgOpen%

         # Blank line

         echo -e title \x20 >> %CfgOpen%

         echo clear >> %CfgOpen%

         echo >> %CfgOpen%

 

         echo title to load disk image and start >> %CfgOpen%

         echo echo -e Loading :%FL_Open^% … >> %CfgOpen%

         echo map %FL_Open^% (hd0) >> %CfgOpen%

         echo map –hook >> %CfgOpen%

         echo rootnoverify (hd0) >> %CfgOpen%

         echo chainloader (hd0)+1 >> %CfgOpen%

         echo >> %CfgOpen%

         echo title disk image is loaded into memory and start >> %CfgOpen%

         echo echo -e Loading :%FL_Open^% … >> %CfgOpen%

         echo map –mem %FL_Open^% (hd0) >> %CfgOpen%

         echo map –hook >> %CfgOpen%

         echo rootnoverify (hd0) >> %CfgOpen%

         echo chainloader (hd0)+1 >> %CfgOpen%

         echo >> %CfgOpen%

 

         # Blank line

         echo -e title \x20 >> %CfgOpen%

         echo clear >> %CfgOpen%

         echo >> %CfgOpen%

         echo title as a boot file to start >> %CfgOpen%

         echo chainloader %FL_Open^% >> %CfgOpen%

         echo >> %CfgOpen%

 

         echo title as a menu file to start >> %CfgOpen%

         echo configfile %FL_Open^% >> %CfgOpen%

         echo >> %CfgOpen%

 

         echo title as an external command to start >> %CfgOpen%

         echo command %FL_Open^% >> %CfgOpen%

         echo >> %CfgOpen%

 

         # Blank line

         echo -e title \x20 >> %CfgOpen%

         echo clear >> %CfgOpen%

         echo >> %CfgOpen%

 

         echo title to view the file contents (text) >> %CfgOpen%

         echo pager on >> %CfgOpen%

         echo cat %FL_Open^% >> %CfgOpen%

         echo pause >> %CfgOpen%

         echo command FileList %FL_Param^% >> %CfgOpen%

         echo >> %CfgOpen%

 

         echo title to view the file contents (Hex) >> %CfgOpen%

         echo pager on >> %CfgOpen%

         echo cat –hex %FL_Open^% >> %CfgOpen%

         echo pause >> %CfgOpen%

         echo command FileList %FL_Param^% >> %CfgOpen%

         echo >> %CfgOpen%

         # Blank line

         echo -e title \x20 >> %CfgOpen%

         echo clear >> %CfgOpen%

         echo >> %CfgOpen%

 

         echo title as the font file to load (UniFont) >> %CfgOpen%

         echo echo -e Loading font files:%FL_Open^%… >> %CfgOpen%

         echo font %FL_Open^%>> %CfgOpen%

         echo command FileList %FL_Param^% >> %CfgOpen%

         echo >> %CfgOpen%

         # Blank line

         echo -e title \x20 >> %CfgOpen%

         echo clear >> %CfgOpen%

         echo >> %CfgOpen%

         echo title Returns >> %CfgOpen%

         echo command FileList %FL_Param^% >> %CfgOpen%

         echo >> %CfgOpen%

exit

 

HOTKEY UTILITY

The hotkey grub4dos program allows you to set a hotkey for title and iftitle menu entries or for global actions when in the menu system.

Command examples:

hotkey – installs hotkey, displays help + currently registered keys if hotkey was already run

hotkey -h – installs hotkey or displays registered hotkeys but without displaying help text

hotkey -A – The menu item can be selected by pressing the first letter of the menu entry

hotkey -nb – select menu using hotkey (do not run)

hotkey -nc – disable control key

hotkey -u – uninstall

hotkey (hotkey) “COMMAND” – set hotkey (hotkey) to always run COMMAND when hotkey is pressed

hotkey (hotkey) – unregister (hotkey)

If -A is used, menu hotkeys p, b, c and e must be shifted (e.g. shift+c to get to grub4dos command console from the menu)

Menu example – to set a hotkey for Ctrl+A key, can use ^ or [ ]

title ^Ctrl+A This menu

or

title [ctrl+A] This menu

If hotkey -A was used, then the user can press t to highlight this menu entry, pressing t again would highlight the next menu entry beginning with t (if there is one).

Examples for global hotkeys (key names are not case sensitive):

hotkey [ctrl+a] “echo fred ;; echo doris”

hotkey [CTRL-R] “reboot”

# F7 to boot from internal HDD

()/%grub%/hotkey [F7] “map (hd0) (hd1) && map (hd1) (hd0) && map –hook && chainloader (hd0)+1 && rootnoverify (hd0) && boot” > nul

# Set Ctrl+F8 hotkey to Reload E2B (if E2B menu not working)

()/%grub%/hotkey [Ctrl+F8] “map –unhook ;; map –unmap=0:0xff > nul ;; root (bd)/ > nul ;; chainloader /grldr > nul ;; boot” > nul

Recognised keys are non 0x0000 entries in the following table (e.g. ctrl+1 is not supported, but ctrl+2 is supported).

shift+, ctrl+ and alt+ can be prefixed (not case sensitive) – e.g. alt+= (+ can actually be any character as it is ignored – e.g. alt-f or altZf will work for alt+f)

See here for list of scan codes generated by the BIOS.

hotkey recognises these keys:

  • unshifted, shift+, ctrl+, alt+, keyname
  • {{0x0231, 0x0221, 0x0000, 0x7800}, “1”},
  • {{0x0332, 0x0340, 0x0300, 0x7900}, “2”},
  • {{0x0433, 0x0423, 0x0000, 0x7a00}, “3”},
  • {{0x0534, 0x0524, 0x0000, 0x7b00}, “4”},
  • {{0x0635, 0x0625, 0x0000, 0x7c00}, “5”},
  • {{0x0736, 0x075e, 0x071e, 0x7d00}, “6”},
  • {{0x0837, 0x0826, 0x0000, 0x7e00}, “7”},
  • {{0x0938, 0x092a, 0x0000, 0x7f00}, “8”},
  • {{0x0a39, 0x0a28, 0x0000, 0x8000}, “9”},
  • {{0x0b30, 0x0b29, 0x0000, 0x8100}, “0”},
  • {{0x0c2d, 0x0c5f, 0x0c1f, 0x8200}, “-“},
  • {{0x0d3d, 0x0d2b, 0x0000, 0x8300}, “=”},
  • {{0x1071, 0x1051, 0x1011, 0x1000}, “q”},
  • {{0x1177, 0x1157, 0x1117, 0x1100}, “w”},
  • {{0x1265, 0x1245, 0x1205, 0x1200}, “e”},
  • {{0x1372, 0x1352, 0x1312, 0x1300}, “r”},
  • {{0x1474, 0x1454, 0x1414, 0x1400}, “t”},
  • {{0x1579, 0x1559, 0x1519, 0x1500}, “y”},
  • {{0x1675, 0x1655, 0x1615, 0x1600}, “u”},
  • {{0x1769, 0x1749, 0x1709, 0x1700}, “i”},
  • {{0x186f, 0x184f, 0x180f, 0x1800}, “o”},
  • {{0x1970, 0x1950, 0x1910, 0x1900}, “p”},
  • {{0x1a5b, 0x1a7b, 0x1a1b, 0x1a00}, “[“},
  • {{0x1b5d, 0x1b7d, 0x1b1d, 0x1b00}, “]”},
  • {{0x1e61, 0x1e41, 0x1e01, 0x1e00}, “a”},
  • {{0x1f73, 0x1f53, 0x1f13, 0x1f00}, “s”},
  • {{0x2064, 0x2044, 0x2004, 0x2000}, “d”},
  • {{0x2166, 0x2146, 0x2106, 0x2100}, “f”},
  • {{0x2267, 0x2247, 0x2207, 0x2200}, “g”},
  • {{0x2368, 0x2348, 0x2308, 0x2300}, “h”},
  • {{0x246a, 0x244a, 0x240a, 0x2400}, “j”},
  • {{0x256b, 0x254b, 0x250b, 0x2500}, “k”},
  • {{0x266c, 0x264c, 0x260c, 0x2600}, “l”},
  • {{0x273b, 0x273a, 0x0000, 0x2700}, “;”},
  • {{0x2827, 0x2822, 0x0000, 0x0000}, “‘”},
  • {{0x2960, 0x297e, 0x0000, 0x0000}, “`”},
  • {{0x2b5c, 0x2b7c, 0x2b1c, 0x2600}, “\”}, same as ctrl+L (actually 2800 on some keyboards)
  • {{0x2c7a, 0x2c5a, 0x2c1a, 0x2c00}, “z”},
  • {{0x2d78, 0x2d58, 0x2d18, 0x2d00}, “x”},
  • {{0x2e63, 0x2e43, 0x2e03, 0x2e00}, “c”},
  • {{0x2f76, 0x2f56, 0x2f16, 0x2f00}, “v”},
  • {{0x3062, 0x3042, 0x3002, 0x3000}, “b”},
  • {{0x316e, 0x314e, 0x310e, 0x3100}, “n”},
  • {{0x326d, 0x324d, 0x320d, 0x3200}, “m”},
  • {{0x332c, 0x333c, 0x0000, 0x0000}, “,”},
  • {{0x342e, 0x343e, 0x0000, 0x0000}, “.”},
  • {{0x352f, 0x353f, 0x0000, 0x0000}, “/”},
  • {{0x3b00, 0x5400, 0x5e00, 0x6800}, “f1”},
  • {{0x3c00, 0x5500, 0x5f00, 0x6900}, “f2”},
  • {{0x3d00, 0x5600, 0x6000, 0x6a00}, “f3”},
  • {{0x3e00, 0x5700, 0x6100, 0x6b00}, “f4”},
  • {{0x3f00, 0x5800, 0x6200, 0x6c00}, “f5”},
  • {{0x4000, 0x5900, 0x6300, 0x6d00}, “f6”},
  • {{0x4100, 0x5a00, 0x6400, 0x6e00}, “f7”},
  • {{0x4200, 0x5b00, 0x6500, 0x6f00}, “f8”},
  • {{0x4300, 0x5c00, 0x6600, 0x7000}, “f9”},
  • {{0x4400, 0x5d00, 0x6700, 0x7100}, “f10”},
  • {{0x5200, 0x5230, 0x9200, 0xa200}, “ins”},
  • {{0x5300, 0x532e, 0x9300, 0xa300}, “del”},
  • {{0x8500, 0x8700, 0x8900, 0x8b00}, “f11”},
  • {{0x8600, 0x8800, 0x8a00, 0x8c00}, “f12”},