Strings
STRINGS 2.5 Copyright 1991-1993, 1995 Douglas Boling
First published in PC Magazine, December 29, 1992
If this third-party file is placed on your computers search PATH, example:
"C:\windows\command\STRINGS.COM", then you can use the "good old utility":
The STRINGS command.
Usage: STRINGS [/?][/M][/Q][/Pc][/Bn][/I][/U] [env var =] FUNCTION [Params]
/M - Use master environment
/Q - Suppress output to screen
/Pc - Use char c instead of ',' as the parse character
/Bn - Use n as the number base
/I - Installs as resident code. DOS 3.3 or later required
/U - Uninstalls if resident
Table of Contents
Convert numbers
Dec. to binary
Batchfiles
MAX.BAT Greatest number?
WATCH.BAT Stopwatch
DELIVER.BAT Get filenames & Deliver each filename to some function(s).
SPLIT.BAT Splits a file into multiple smaller files.
INFINITY.BAT The definition of BENNYLEVEL. I used both STRINGS and SED.
INPUT from, about the system
Memory
Environment
Disk
Drive
Directory
File
Date & Time
Various
INPUT from or about the system
* Memory
:: The amount of conventional memory....... Strings x=MEMTOTAL
:: Largest block of free conventional mem.. Strings x=MEMFREE
:: Largest block of free upper memory...... Strings x=UMBLARGE
:: Amount of extended memory............... Strings x=XMSTOTAL
:: Amount of free extended memory.......... Strings x=XMSFREE
:: Version of the extended memory driver... Strings x=XMSVER
:: Amount of expanded memory............... Strings x=EMSTOTAL
:: Amount of free expanded memory.......... Strings x=EMSFREE
:: Version of the expanded memory driver... Strings x=EMSVER
:: The offset of a series of bytes in memory
Strings x=SCAN Segment, Starting offset, b1 [,b2]
:: A series of bytes from memory
Strings x=PEEK Segment, Offset [, n bytes [,Word flag]]
:: Writes up to 8 bytes to memory
Strings x=POKE Segment, Offset,b1[,b2][,b3]... [,b8]
* Environment
:: Bytes free in the environment........... Strings x=ENVFREE
:: Size of the environment................. Strings x=ENVSIZE
:: Address of the master environment....... Strings x=MASTERENV
:: A variable from the master environment.. Strings x=MASTERVAR Variable
* Disk
:: Free disk space (Mb).................... See WHAT.EXE
* Drive
:: Current drive........................... Strings x=FILEDRIVE nul
:: Drive of a filename..................... Strings x=FILEDRIVE filename
:: Letter of the last possible drive....... Strings x=LASTDRIVE
* Directory
:: Current directorys...................... Strings x=FILEDIR *
:: Directorys of a filename................ Strings x=FILEDIR filename
* File
:: Complete filename....................... Strings x=TRUENAME filename
:: Filename................................ Strings x=FILENAME filename
:: File extension.......................... Strings x=FILEEXT filename
:: File size (byte)........................ Strings x=FILESIZE filename
:: File size (Kb).......................... See WHAT.EXE
:: Number of lines......................... Strings x=LINESIZE filename
REM Find/v/c "á4^z£Ï5" %0
* Date & Time
:: The date of a file...................... Strings x=FILEDATE Filename
:: The time of a file...................... Strings x=FILETIME Filename
:: The current date as Month dd, yyyy...... Strings x=DATE
:: The name of the month................... Strings x=MONTH [Index (1=Jan)]
::
Strings m04=MONTH 4
Strings mon=MONTH
If not %mon%==%m04% Echo ** It's not April but %mon% **
:: The name of the day of the week......... Strings x=DAY [Index (1=Sun)]
:: The current time........................ Strings x=TIME
:: The date for the ROM BIOS............... Strings x=BIOSDATE
* Various
:: DOS version number...................... Strings x=VER
:: Truever (DOS 5.0 or later).............. Strings x=TRUEVER
:: Windows running?........................ Strings x=INWIN
::
If %x%==1 Echo WIN IS RUNNING (%WINdir%)
The usual method:... If not %WINdir%'==' Echo YES. (%WINdir%)
:: Country code for the system............. Strings x=COUNTRY
:: Active codepage (DOS 3.3 or later)...... Strings x=CODEPAGE
:: Total number of files that can be open.. Strings x=FILES
Greatest number?
Example: call max n1 n2
Returns: If %max%==0 Echo equals
If %max%==1 Echo n1 is greater than n2
If %max%==2 Echo n%max% is greater than n1
:: MAX.BAT
::
SET MAX=0
IF %1'==%2' GOTO 0
IF %2==0 GOTO 1
STRINGS MAX=DIV %1, %2
IF NOT %MAX%==0 GOTO 1
SET MAX=2
GOTO 0
:1
SET MAX=1
:0
Here's my stopwatch (version 1.01).
Strings.com v2.5 is used.
Note:
if your OS is English (not Danish), then
you MUST substitute "Klokken" with "Current".
Win9x hint:
Press [Ctrl+Alt+Del] and close aplications such as anti virus etc.,
would returns less values of used milli seconds.
WATCH.BAT runs fast on a RAM drive.
--- call_it.bat:
@echo off
:: rem | choice /tn,4 (Pause between 300 and 500 mS.) <nul>nul
call watch start
call watch end
--- watch.bat: (31 lines and EXACT 1024 bytes)
@echo if not %%1!==! goto !>Klokken.bat
::@ if OS=English (not Danish), then substitute "Klokken" with "Current".
@echo. | TIME>>Klokken.bat
find /v "@" <watch.bat>>Klokken.bat
if end==%1 call mSeconds @
@if end==%1 set mSeconds=%mS%
for %%@ in (call del goto:%1) do %%@ Klokken.bat
:!
shift
strings t=find %1,.
if %t%==0 goto !
set t=
strings L=length %1
if %L%==7 set t=0
strings h=mid %t%%1,1,2
strings m=mid %t%%1,4,2
strings s=mid %t%%1,7,2
strings h=mul %h%,36
strings mS=add %h%0000,%m%000,%m%000,%m%000,%m%000,%m%000,%m%000,%s%00,%2
echo set mS=%mS%>mSeconds.bat
::@ for %%v in (%1'%2: %mS% .) do echo %%v
for %%v in (h m s mS L t) do set %%v=
:end @
for %%@ in (call del) do %%@ mSeconds.bat
@set SelfTime=09
@strings sub %mS%,%mSeconds%,%SelfTime% | find "underflow">nul
@if not errorlevel 1 strings SelfTime=sub %SelfTime%,01
@strings mS=sub %mS%, %mSeconds%, %SelfTime%
for %%@ in (echo:[%mS%] echo. pause cls) do %%@
for %%@ in (SelfTime mSeconds mS cmdline) do set %%@=
:start @
--- WATCH.BAT: (32 lines and 921 bytes).
This version runs faster. Whether it's on a RAM drive or a normal HD,
total about 5 milli seconds. Line number 25: "timeEND -timeSTART -4",
(5 -4 = 1 milli second) so, whether it's on a RAM drive or a
normal HD, it returns about 1/100 second.
To get rid of the SHIFT command, I used a little tricks:
The TIME command returns three words in English but only
two words in Danish: "Current time is" and "Klokken er".
The reverce order %4 %3 %2 (see below), did this tricks.
GOTO %1!
:END!
KLOKKEN
:START!!
SET U=%3.%2
ECHO IF NOT %%1!==! %0 %1! %%4 %%3 %%2>KLOKKEN.BAT
ECHO. | TIME>>KLOKKEN.BAT
Klokken
:start!!!
echo ! | choice /c%u%!> nul
for %%! in (0 00) do if not errorlevel +%%! set t=%%!
strings h=mid %t%%u%,2,2
strings m=mid %t%%u%,5,2
strings s=mid %t%%u%,8,2
strings u=mid %t%%u%,11,2
strings h=mul %h%,36
strings u=add %h%0000,%m%000,%m%000,%m%000,%m%000,%m%000,%m%000,%s%00,%u%
echo ! | choice /c'''%3!> nul
for %%! in (0 00) do if not errorlevel +%%! set t=%%!
strings h=mid %t%%3,2,2
strings m=mid %t%%3,5,2
strings s=mid %t%%3,8,2
strings h=mul %h%,36
strings t=add %h%0000,%m%000,%m%000,%m%000,%m%000,%m%000,%m%000,%s%00,%2
strings u=sub %t%,%u%,4
echo [%u%]
for %%! in (u L t h m s cmdline) do set %%!=
for %%! in (del pause cls goto:!) do %%! Klokken.bat
:START!
echo if not %%1!==! %0 %1! %%4 %%3 %%2> Klokken.bat
ECHO. | TIME>>KLOKKEN.BAT
:!
Problem:
A number such as 255.000.000.000.000.000 maybe
a problem for DOS? But not for a simple batch-
program.
I used the following program to solve the math
problem, which is the solution for the synonym
named bennylevel [described by William Allen].
infinity
SUM ((10^(i-1)) (Xi-48)) = 256n +e
i=1
|
Solution:
@echo off
for %%v in (//) do echo%%v
strings v=char 32,32,32,32,32,32,32,32,32,32
strings e= ask ÿ ?: %v% IF ERRORLEVEL=
echo "%e%" | find "," >nul
if not errorlevel 1 goto e
echo "%e%" | find "|" >nul
if not errorlevel 1 goto e
echo "%e%" | find ">" >nul
if not errorlevel 1 goto e
echo "%e%" | find "<" >nul
if not errorlevel 1 goto e
echo "%e%" | find ";" >nul
if not errorlevel 1 goto e
:: substitutes ASCII char. 21dec(15hex) with 59dec(3Bhex)
echo:%e%| sed "s/\x15/\x3B/g;s/^/set e=/" >%temp%\A21.bat
call %temp%\A21.bat
if "%e%"=="" for %%v in (echo set:e) do %%v= %v%%v%%v% HA
strings e=parse %e%, 1,
strings e=right %e%, 8,
strings v=length %e%
strings e=val %e%
echo: %e%|find " 61 " >nul
if not errorlevel 1 goto e
echo: %e%|sed "s/^/set e=/;s/\<59\>/21/g" >%temp%\A21.bat
for %%v in (call del) do %%v %temp%\A21.bat
set i=1
strings /p\ s= parse 208,240,48,176,176,176,176,176\%v%\,
:repeat
strings /p\ ai=parse 1,10,100,232,16,160,64,128,0,0\%i%\,
strings /p\ xi=parse %e% \%v%
strings char %xi%
strings /p* ax=mul %xi% *%ai%
strings /p+ s = add %s% +%ax%
strings /p+ i = add %i% +1
strings /p- v = sub %v% -1 | find "STRINGS 2.5 Copyright"
if not errorlevel xxA goto e
if not %v%==0 goto: repeat
strings /p/ v=div %s% /256
strings /p* v=mul %v% *256
strings /p- s=sub %s% -%v%
echo. It's the same as: IF ERRORLEVEL=%s%
for %%v in (e v s i ai xi ax ) do set %%v=
for %%v in (echo. echo. pause cls goto:eof) do %%v
:e msg
for %%v in (echo.ÿillegalÿcharacter. pause cls %0) do %%v
:EOF
:: Example of purpose: [Thee may click on this link]
Strings.com
Download "strings.zip" (v2.5)
|