|
From the News Page 3 | |
Convert to HEX, DEC, BIN or whatever.
Rename myFile.tmp "Date Time"
Hi, --Here's a little batch file to play with. --Loop
Detecting the ram drive letter with use of only one line. (Win9x)
A little study about the [Enter] key.
Remember this question.
Writing text on the DOS screen.
Odd or even numbers.
Get 8 (or less) characters into variable.
Add Sub.
: CONVERT.BAT
// Script by Lars Peter Thomsen. -- http://wsabstract.com/
// Modified; Not case sensitive version by Benny Pedersen.
@ ECHO OFF %-- Script language="Win9x/DOS BATch" --%
@ FIND "@"/v <%0> %temp%.\~Convert.htm
@ FOR %%@ IN (START rem:CLS DEL EXIT) DO %%@ %temp%.\~Convert.htm
<html><head><title>Convert</title><style>body{background-color:
#A9A9A9} A:visited,A:link {color:#00ff66; text-decoration:none}
A:active,A:hover {background-color:#FFFAFA;color:#000066} TABLE
{background-color:#000066;border:0px #000066 solid}</style></head>
<body bgcolor="#000066" text="#FAEBD7" link=#00ff66 vlink=#00ff66>
<script language="JavaScript">
// Script by Lars Peter Thomsen. -- Modified; Not case sensitive
// version by Benny Pedersen, http://users.cybercity.dk/~bse26236/
function convert() {input=(document.formcon.Input.value);
origin=(document.formcon.Origin.value);
dest=(document.formcon.Destination.value);
base="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; c=0; Result="";
for (t=1; t<=input.length; t++)
{b=base.indexOf(input.substring(t-1,t).toUpperCase()); n=b*(Math.pow
(origin, input.length-t)); c+=n} a=100; while (c< Math.pow (dest,a))
{ a--; } while (a>-1) {e=Math.pow (dest, a); a--; d=((c-(c%e))/e)+1;
c=c%e; Ciffer=base.substring(d-1, d); Result = Result + Ciffer}
document.formcon.output.value=Result}
</script><br><table align="center" border="0"><tr><td>
<font face="andale mono" size="2"><form name="formcon">
<br><input type="text" name="Input" size="16"> Number to convert
<br><input type="text" name="Origin" size="3"> Original scale, ex.
16 for hex, 10 for dec, 2 for bin, etc.<br>
<input type="text" name="Destination" size="3"> Destination scale
<br><input type="button" onClick="convert(this.form.Input.value,
this.form.Origin.value,this.form.Destination.value)"
value="Calculate!"><br>
<input type="text" name="output" size="16"> Result of Conversion<br>
</form></font><a href="http://users.cybercity.dk/~bse26236/">:-)</a>
</td></tr></table><br></body></html>
@ END//-- Use your mouse to click on this batch file; CONVERT.BAT --//
Rename myFile.tmp "Date Time"
According to DOS 6.22 is here a rewrite of my patchwork but of cause; you'll
only get the 8+3 file format in old DOS as usually.
Note: two lines got wrapped:
@ECHO OFF
REM> myFile.tmp
ECHO::exit|%comspec% /k prompt ren:myFile.tmp;$d $t.*> %temp%.\~ren.bat
::============================================ MODULE FOR SUBSTITUTION:
set object=%temp%.\~ren.bat
set new=.
set old=:
set flag=> %temp%.\~.scr
:Loop -----------------------
find "%old%" < %object% > nul
if errorlevel 1 goto End_Loop
:THE TWO WRAPPED LINES GOES HERE:
echo exit|%comspec% /k prompt s100L64'%old%'$_q|debug %object%|find "-"/v>
%temp%.\~.scr
echo exit|%comspec% /k prompt e104'e'$_e109'"%new%"'d a'w'd a'q'd a$_rcx$_
14$_w104$_q|debug %temp%.\~.scr>nul
for %%v in (debug goto:Loop,) do %%v %object% < %temp%.\~.scr > nul
:End_Loop -------------------
set flag=%flag%#
%[ Replace Comma (,) with Dot (.) ]% set new=.
if #==%flag% for %%v in (set goto:loop) do %%v old=,
%[ Replace Slash (/) with Minus (-) ]% set new=-
if ##==%flag% for %%v in (set goto:loop) do %%v old=/
%[ Replace Space ( ) with quote (')........ ]% set new=''
if ###==%flag% for %%v in (set goto:loop) do %%v old= % %
%[ Fix an unwanted substitution............ ]% set new=ren:
if ####==%flag% for %%v in (set goto:loop) do %%v old=ren.
%[ Fix an unwanted substitution............ ]% set new=:exit
if #####==%flag% for %%v in (set goto:loop) do %%v old=.exit
del %temp%.\~.scr
for %%v in (object flag new old) do set %%v=
::============================================ END OF MODULE
FOR %%' in (CAL DE) do %%'L %temp%.\~ren.bat
Hi,
Here's a little batch file to play with.
It can be used to whatever but as it is,
it returns the ASCII values as hex numb.
Benny Pedersen,
PS. Labels and Goto's are placed in left margin. All other
lines is prefixed with two spaces.
Notes: Tested in Win 98.
Three lines, (28, 31 and 42) got wrapped.
If you are using PFE32 Editor, then you may press Ctrl-G and 42.
@GOTO %1#
:#####
FOR %%e in (E HIF) do S%%eT L=%2
ECHO. e%L%0 %2
if not (%3) == () ECHO. e%L%1 %3
if not (%4) == () ECHO. e%L%2 %4
if not (%5) == () ECHO. e%L%3 %5
if not (%6) == () ECHO. e%L%4 %6
if not (%7) == () ECHO. e%L%5 %7
if not (%8) == () ECHO. e%L%6 %8
if not (%9) == () ECHO. e%L%7 %9
FOR %%e in (1 2 3 --------------4 5 6 7 8) do SHIFT
if not (%2) == () ECHO. e%L%8 %2
if not (%3) == () ECHO. e%L%9 %3
if not (%4) == () ECHO. e%L%A %4
if not (%5) == () ECHO. e%L%B %5
if not (%6) == () ECHO. e%L%C %6
if not (%7) == () ECHO. e%L%D %7
if not (%8) == () ECHO. e%L%E %8
if not (%9) == () ECHO. e%L%F %9
FOR %%v in (ECHO ECHO PAUSE CLS GOTO:EOF) do %%v.
:#
@ECHO OFF
echo Batch are reading each line... Step through...> %temp%.\~test.txt
SET F=%temp%.\~test.txt
echo exit|%comspec%/kprompt rcx$_$_q|debug %F%|find "CX">%temp%.\~
echo exit|%comspec%/kprompt L2$_e0'd100L'$_eB'q'd$_rcx$_D$_w0$_q|debug %te
mp%.\~>nul
debug %F%<%temp%.\~ |find ":">%temp%.\~
echo exit|%comspec%/kprompt eFA'SET F='$_e104 d a$_rcx$_C$_n%temp%.\~.bat$
_wFA$_q|debug %temp%.\~>nul
call %temp%.\~.bat
:##
:###
FOR %%! IN (0 1 2 3 4 5 6 7 8 9 A B C D E F) DO CALL %0 #%1 %2%%! %2
GOTO EOF
:####
IF 00==%3 GOTO EOF
find "%F%:%20"<%temp%.\~>%temp%.\~.bat
if errorlevel 1 for %%v in (del EXIT) do %%v %temp%.\~*
echo exit|%comspec%/kprompt L5$_eA'SET L='$_e27 9$_rcx$_35$_wA$_q|debug %t
emp%.\~.bat>nul
call %temp%.\~.bat
call %0 #### %2 %L%
:EOF (wrap: 28 31 42)
:: Links: The nested zero tricks...
:: Outsider said: this is...
A brief description of some possibilities, (try it:)
@GOTO '%1
:'
@ECHO OFF
:'#
:'##
IF # ==%1 FOR %%v in (ECHO. PAUSE) do %%v -- Pause for each 100 --
IF ##==%1 FOR %%v in (ECHO. PAUSE) do %%v -- Pause for each 10 --
FOR %%! IN (0 1 2 3 4 5 6 7 8 9) DO CALL %0 #%1 %2%%! %3 %4 %%! %2
GOTO EOF
:'###
ECHO. %3'' '%4' ''%5 %6' %3'%5 '%4%5 %2
:EOF
Detecting the ram drive letter with use of only one line. (Win9x)
Frank-Peter Schultze wrote:
BTW, determining the ramdrive letter using FINDRAMD.EXE and BennyLevel
ERRORLEVEL Checking requires only two command lines:
Findramd.exe
For %%D In (C D E F G H I J K ...) Do If ErrorLevel H%%D Set RAMD=%%D
Perhaps, Benny knows how to compress this into one line ;-)
Yes ---
@echo off
If two lines is to much, then use this one:
Findramd.exe|FOR %%D in (C D E F G H I J K L M N O P Q R S T U V W X Y Z
) do if errorlevel H%%D set RAMD=%%D
but the above variable %RAMD% maybe also is to much? ;-) so, use this one:
Findramd.exe|FOR %%D in (Z Y X W V U T S R Q P O N M L K J I H G F E D C
) do if errorlevel H%%D %comspec%/cecho. (%%D)
A good reson for not writing batch files in one line is that the temporary
folder maybe filled up with files such as AABIGPIG so if you are using one
of the above "one-lines", then I would suggest that you end the batch file
as this: DEL %TEMP%.\*.
FOR %%v in ("choice Erase" if:not" errorlevel 2 del/p" cls ) do %%v %t
emp%.\*.
:EOF
Note: The "DEL %TEMP%.\*." won't include normal files or folders but files
without an extension will be deleted (tested in DOS 6.22 and Win98).
Link to all what is written about the BennyLevel: <Search all News Groups>
A little study about the [Enter] key
..
@echo off
echo.
echo. Input your name:
echo exit|%comspec%/kprompt e11E'set n'3D$_w$_q>%temp%.\~.bat
fc /n nul /Lb1 con | find "1" >> %temp%.\~.bat
type %temp%.\~.bat | debug %temp%.\~.bat >nul
type %temp%.\~.bat | find "=" > %temp%.\~.bat
for %%v in (call del cls) do %%v %temp%.\~.bat
:----Loop
echo.
echo.%n%, input a number OR press Enter and Escape to quit:
choice /n /c1234567890 /t,9 Input was: | find ""/v> con
:: 27d 1Bh ----------^---^ 07 ---^^-- 1Bh
FOR %%v in %( Possible exit codes of FIND )% ( 0 1 2 ) do if errorlevel %%
v SET E=%%v
FOR %%v in (ECHO.Errorlevel" %E%" "SET E=") do %%v
FOR %%v in ("1 PAUSE" "0 CLS" "1 GOTO ----Loop") do if errorlevel %%v
SET N=
GOTO EOF
Notes:
An input, which is not specified as an option in the CHOICE command, do
return the character of ASCII value 7. So, also other keys than [Enter]
which are followed by an [Esc] key press, do causes this batch to exit.
The below line, (discovered hmmm, constructed: August 26 2001),
FOR %%v in ("1 PAUSE" "0 CLS" "1 GOTO ----Loop") do if errorlevel %%v
can be substituted with the following line:
FOR %%v in (pause:00000001 cls:00000000 goto:----Loop00000001) do if er
rorlevel %%v %%v
:EOF -- The below batch file will also allow you to press the [Enter] key:
Remember this question
@echo off
echo.
%COMSPEC%/Y/CRemember this question: Is CHOICE.COM in drive A:|FIND "N
">NUL
FOR %%! IN (0 1 2) DO IF ERRORLEVEL %%! SET E=%%!
FOR %%v in ("0 ECHO. Errorlevel %E%" "0 ECHO." "0 ECHO. No" "1 ECHO. Hm
mm, on second thought, I think your answer was Yes") do if errorlevel %%v
echo.
%COMSPEC%/Y/C :: (two colons) instead of the above Rem[ASCII 7]ember:|F
IND "Y">NUL
echo. Okay.
REM ---- Try: Substitute the NUL with CON
Note: Use a "N" instead of "Y". Since the Y in YES is language sensitive,
then it's better to use FIND "N" for N in NO than using a letter Y.
Writing text on the DOS screen
FIND and four quotes. Discovered: August 27, 2001.
Benny, PS: Use the [Alt+Left Enter] key to toggle.
@echo off
echo.
echo. Write your text on the DOS screen. When done, press [Ctrl+Break] or
[Ctrl+C]...
echo. If you want to keep your text, then remember to copy and paste befor
e you exit.
echo.---------------------------------------------------------------------
-----------
%comspec%/cfind """"
:: OR: %comspec%/cfind ""<con
Notepad %0
Odd or even numbers
@echo off
set n=146255181346321643201345152164058316785437616494128
set n=:ÿ%n%
:: ^---- FF (255d)
FOR %%! IN (Even%n% Odd%n%.) DO %COMSPEC%/cIF ERRORLEVEL %%!000000 ECHO.%%!
:: ^---- 08.
:: The extra line: "set n=:ÿ%n%" was add to avoid line wrapping.
:: [ NOT NOT ]
%COMSPEC%/cIF errorlevel %n%0000000 ECHO Last digit of %n% is even
:: NOT
%COMSPEC%/cIF NOT errorlevel %n%0000000 ECHO Last digit of %n% is NOT even
::
%COMSPEC%/cIF NOT errorlevel %n%0000128 ECHO %n% is even, NOT odd.
:: Get rid of NOT. Just substitute the zero in the centre with a ` or an @
%COMSPEC%/cIF errorlevel %n%000`000 ECHO Last digit of %n% is NOT even
%COMSPEC%/cIF errorlevel %n%000@000 ECHO %n% is NOT even, %%n%% is odd
set n=
:: Test.bat
@echo off
choice/c12 Odd or Even --
for %%v in (1 2) do if errorlevel %%v set n=%%v
:: Formula: (256n +128) where n is an integer.
FOR %%! IN ("000 ECHO %n% is" "128 ECHO %n% is NOT") DO %COMSPEC%/cIF ER
RORLEVEL %n%0000%%! even
REM or:
FOR %%! IN ("0 ECHO %n% is even" "° ECHO %n% is odd") DO %COMSPEC%/cIF E
RRORLEVEL %n%000000%%!
:: ASCII 176 ---^
REM or:
FOR %%! IN ("0 ECHO %n% is" "° ECHO %n% is NOT") DO %COMSPEC%/cIF ERRORL
EVEL %n%000000%%! even
:: ASCII 176 ---^
REM -- I better like this one:
FOR %%! IN (Even:ÿ%n% Odd:ÿ%n%.) DO %COMSPEC%/cIF ERRORLEVEL %%!000000
ECHO.%%!
:: ASCII FF---^ ^--08 ^-- FF (255d).
set n=
:: google.com
Get 8 (or less) characters into variable
Tested in Win98.
@echo off >%temp%.\~.bat
:: Set a variable
SET cmdline=1234testing
:: Create a file, (unwrap all four lines to ONLY one line)
ECHO exit|%comspec%/kprompt f1L8'%cmdline%'1A$_f100L50'set %%==='d a$
_e105'1'$_m1L1 107$_e10F'2'$_m2L1 111$_e119'3'$_m3L1 11B$_e123'4'$_m4L1 125$
_e12D'5'$_m5L1 12F$_e137'6'$_m6L1 139$_e141'7'$_m7L1 143$_e14B'8'$_m8L1 14D$
_rcx$_50$_w$_q|debug %temp%.\~.bat>nul
:: Use the file
CALL %temp%.\~.bat v1 v2 v3 v4 v5 v6 v7 v8
:: Show contents of variable
ECHO. %v1%%v2%%v3%%v4%%v5%%v6%%v7%%v8%
ECHO. %v8%%v7%%v6%%v5%%v4%%v3%%v2%%v1%
ECHO. %v1%%v5%%v2%%v6%%v3%%v7%%v4%%v8%
FOR %%v in (%v1% %v2% %v3% %v4% %v5% %v6% %v7% %v8%) do echo. (%%v)
ECHO. %v1% %v2% %v3% %v4% %v5% %v6% %v7% %v8%
:: Clean up
FOR %%v in (v1 v2 v3 v4 v5 v6 v7 v8) do set %%v=
DEL %temp%.\~.bat
EXIT. Notes:
If length of string = c, then for c in [0;7], V(c+1) is set to blank:
SET cmdline=12
CALL %temp%.\~.bat V(1) V(2) V(3) V(4) V(5) V(6) V(7) V(8)
would: set V(1)=1 and V(2)=2 and V(3) would be set to blank.
FOR %%i in (0 1) do set V(%%i)=
CALL %temp%.\~.bat V(0) V(1) V(1) V(1) V(1) V(1) V(1) V(1)
IF not (%V(1)%) == () ECHO. Length is 8 or greater.
SET
Let the number of variable be one, (or greater) than needed:
SET cmdline=12
CALL %temp%.\~.bat V(1) V(2) cmdline
Repeated with reversed parameters:
End of the easy part. Now let us see if it can be used to solve a bit more
difficult problem than just get numbers separated with space.
Let us say that wee got a number and got 1, 2 or 3 digits.
SET d=476
ECHO exit | %comspec% /k prompt f1L8'%d%' ...[snipped].
CALL %temp%.\~.bat d100 d010 d001 cmdline
No problems! but if our input was d=47, then wee got this:
d100=4
d010=7
Solution:
SET d=%d001%%d010%%d100%000
ECHO exit | %comspec% /k prompt f1L8'%d%' ...[snipped].
CALL %temp%.\~.bat d001 d010 d100 d d d d
d100=0
d010=4
d001=7
Since 47 = 100(0) +10(4) +1(7), then it should be possible
to take advange of this in next chapter which is about add
numbers. Now u also know why I wrote the above batch file.
Next chapter is written but it is also under construction.
<!--
-->
@echo off
SET d100=2
SET d10=7
SET d1=0
SET n100=
SET n10=7
SET n1=0
ECHO. (%d100%%d10%%d1% +- %n100%%n10%%n1%) =
IF not (%d1%) == () GOTO got(d)
ECHO. Input d, (max 3 digits):
echo exit|%comspec%/kprompt e11f'SET d'3d$_w$_q>%temp%.\~.bat
fc /n nul /Lb1 con |find "1">> %temp%.\~.bat
type %temp%.\~.bat | debug.exe %temp%.\~.bat >nul
type %temp%.\~.bat |find "=" > %temp%.\~.bat
call %temp%.\~.bat
ECHO exit|%comspec%/kprompt f1L8'%d%'1A$_f100L50'set %%==='d a$_e105'1'
$_m1L1 107$_e10F'2'$_m2L1 111$_e119'3'$_m3L1 11B$_e123'4'$_m4L1 125$_e12D'5'
$_m5L1 12F$_e137'6'$_m6L1 139$_e141'7'$_m7L1 143$_e14B'8'$_m8L1 14D$_rcx$_50
$_w$_q|debug %temp%.\~.bat>nul
CALL %temp%.\~.bat d100 d10 d1 d
ECHO exit|%comspec%/kprompt f1L8'%d1%%d10%%d100%000'1A$_f100L50'set %%=
=='d a$_e105'1'$_m1L1 107$_e10F'2'$_m2L1 111$_e119'3'$_m3L1 11B$_e123'4'$_m4
L1 125$_e12D'5'$_m5L1 12F$_e137'6'$_m6L1 139$_e141'7'$_m7L1 143$_e14B'8'$_m8
L1 14D$_rcx$_50$_w$_q|debug %temp%.\~.bat>nul
CALL %temp%.\~.bat d1 d10 d100 d1000 d d d
:got(d)
IF not (%n1%) == () GOTO got(n)
ECHO. Input n, (max 3 digits):
echo exit|%comspec%/kprompt e11f'SET n'3d$_w$_q>%temp%.\~.bat
fc /n nul /Lb1 con |find "1">> %temp%.\~.bat
type %temp%.\~.bat | debug.exe %temp%.\~.bat >nul
type %temp%.\~.bat |find "=" > %temp%.\~.bat
call %temp%.\~.bat
ECHO exit|%comspec%/kprompt f1L8'%n%'1A$_f100L50'set %%==='d a$_e105'1'
$_m1L1 107$_e10F'2'$_m2L1 111$_e119'3'$_m3L1 11B$_e123'4'$_m4L1 125$_e12D'5'
$_m5L1 12F$_e137'6'$_m6L1 139$_e141'7'$_m7L1 143$_e14B'8'$_m8L1 14D$_rcx$_50
$_w$_q|debug %temp%.\~.bat>nul
CALL %temp%.\~.bat n100 n10 n1 n
ECHO exit|%comspec%/kprompt f1L8'%n1%%n10%%n100%000'1A$_f100L50'set %%=
=='d a$_e105'1'$_m1L1 107$_e10F'2'$_m2L1 111$_e119'3'$_m3L1 11B$_e123'4'$_m4
L1 125$_e12D'5'$_m5L1 12F$_e137'6'$_m6L1 139$_e141'7'$_m7L1 143$_e14B'8'$_m8
L1 14D$_rcx$_50$_w$_q|debug %temp%.\~.bat>nul
CALL %temp%.\~.bat n1 n10 n100 n n n n
:got(n)
SET d=+>%temp%.\~0.bat
CHOICE /n/cp+m- Minus or Plus? % %
IF errorlevel 3 SET d=-
IF (+) == (%d%) ECHO FOR %%%%N IN (%%N%% 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
6 6 6 6 6 6 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9) DO IF %%%%N==%%
N%% SHIFT>>%temp%.\~0.bat
IF (-) == (%d%) ECHO FOR %%%%N IN (%%N%% 8 7 7 6 6 6 5 5 5 5 4 4 4 4 4
3 3 3 3 3 3 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0) DO IF %%%%N==%%
N%% SHIFT>>%temp%.\~0.bat
SET j=1
:R
ECHO EXIT|%COMSPEC%/kPROMPT SET n=%%%%n%%j%%%%%%$_SET n%%j%%=$_:>%tem
p%.\~n.bat
CALL %temp%.\~n.bat
:R1
ECHO EXIT|%COMSPEC%/kPROMPT SET X=%%%%%%d%j%%%$_:>> %temp%.\~0.bat
IF (+) == (%d%) CALL %temp%.\~0.bat 0 1 2 3 4 5 6 7 8 9 10 11 12 13 1
4 15 16 17 18
IF (-) == (%d%) CALL %temp%.\~0.bat 11 12 13 14 15 16 17 18 19 0 1 2
3 4 5 6 7 8 9
FOR %%X in (0 1 2 3 4 5 6 7 8 9) do IF %%X==%X% GOTO next
SET n=1
FOR %%X in (0 1 2 3 4 5 6 7 8) do IF %n%%%X==%X% SET d%j%=%%X
FOR %%v in (SET GOTO:R1) do %%v j=%j%0
:next
SET d%j%=%X%
IF NOT (%n10%) ==() FOR %%v in (SET GOTO:R) do %%v j=10
IF NOT (%n100%)==() FOR %%v in (SET GOTO:R) do %%v j=100
ECHO. Result: %d1000%%d100%%d10%%d1%
FOR %%v in (X j n d d1 d10 d100 d1000) do SET %%v=
DEL %temp%.\~*.bat
|