Computing.Net > Forums > Programming > Tricky Batch File Code?

Computer Problems? Computing.Net has over 1,000,000 posts about all things technology related! Over 90% answered within 24 hours! Click here to start participating now! Also, be sure to check out the New User Guide.

Tricky Batch File Code?

Reply to Message Icon

Name: notsopro
Date: April 25, 2009 at 16:41:19 Pacific
OS: Windows Vista
Subcategory: Batch
Comment:

Hi, I would like to take what the user has set and take it character by character and convert it into somthing else.
Example:
The user typed in "Hi World"(so before hand this was set; set /p um=Hi World) , I would like the batch file to take the first letter of %um%, which would be "H" and convert it into a already set variable (lets say H=9375) and then take the second letter and "i" and convert it into 4759 (i=4759), and so on... Also to convert it back, how would i do this? Say I compiled all of them together and the end result of "Hi" was "93754759", how would I get it back to "Hi"? Thanks a-million!

Thoughts: Maybe filename juggling, or file content juggling?

So here's the exmple above (it's missing so much it currently doesn't make much sence):

...
set H=9375
set i=4759
set %space%=4954
(and set every letter.. so on..)
set /p um= "Hi World" (user input in "")
...unknow code
type outputfile.txt (I'm assuming that the above code that I don't know will direct the character's set value piece by piece here(some output for temp file). But if not, forget it is here)
pause

Thanks abunch in advance!!!



Sponsored Link
Ads by Google

Response Number 1
Name: ghostdog
Date: April 25, 2009 at 18:01:54 Pacific
Reply:

here's a vbscript

Set objFS = CreateObject("Scripting.FileSystemObject")
Set dict = CreateObject("Scripting.Dictionary")
dict.Add "H" , "9375"
dict.Add "i" , "4954"
WScript.Echo "Enter word: "
Do While Not WScript.StdIn.AtEndOfLine
   strInput = strInput & WScript.StdIn.Read(1)
Loop


keys=dict.Keys
items=dict.Items
j=1
Do Until Len(strInput) = 0
	s = Mid(strInput,1,1)
	For i=0 To dict.Count-1 
	 If keys(i) = s Then
	 	WScript.Echo keys(i), items(i)
	 End If 
	Next
	j=j+1
	strInput = Mid(strInput,j,Len(strInput))
Loop

using the same concept, you can get back characters if you do substring on every 4 characters.

Unix Win32 tools | Gawk for Windows


0

Response Number 2
Name: notsopro
Date: April 25, 2009 at 19:10:42 Pacific
Reply:

Any idea how to do this in a .BAT file?

OR

Since this way is unknown, how about sending the user's text to a seperate file let's call it input.txt

echo %um%  >>input.txt

Does anyone know how to do what I wanted to do in the bat file it's self, in another file (input.txt) and then the .bat file will take character by character and send it to a temp file until the input.txt file is finished and then set the temp file's content as a variable? I know what I need to do, I just lack the coding skills. :\


0

Response Number 3
Name: Judago
Date: April 25, 2009 at 21:05:00 Pacific
Reply:

Converting the letters to numbers is easy

for %%a in ("a=654" "b=54687" "c=564" "d=545") do call set var=%%var:%%~a%%
 

Converting back to letters is more difficult, you must ensure that your numbers don't overlap, for example in the above the number 545 is ambiguous, it can be either part of an "a" and "b" (i.e. ab=65454687) or it could be a "d". After this is figured out the above can be modified to do the opposite.


0

Response Number 4
Name: notsopro
Date: April 25, 2009 at 21:43:49 Pacific
Reply:

Ok, so the only part about .BAT that I don't understand completly is the [for] commands. What would the output variable be (or they) for that line, and how would I set the input? Basically how would I apply it to this:

set /p msg=

Also, say I did have the overlap situation figured out. Would I just be flipping the ("a=654" "b=54687" "c=564" "d=545"...) to ("654=a" "54687=b" "564=c" "545=d"). And again. How would I apply it if the input were from a text file (textfile.txt). But this time we'll just echo the result with %rslt%.

Thanks sooo much! Your awsome. :-)


0

Response Number 5
Name: Judago
Date: April 25, 2009 at 21:56:32 Pacific
Reply:

The script above was converting a variable named var, which was it's only needed input as all of the definitions were static.

As for reading your text file, it really depends on what the contents are and how they are layed out.

A for loop generally works over a finite set and does the same thing on each of the elements, though they can vary. Start up a command line and type in "for /?" to see the specifics of batch for loops, while your at it check out "set /?"


0

Related Posts

See More



Response Number 6
Name: notsopro
Date: April 25, 2009 at 22:42:16 Pacific
Reply:

But where's the output? What would the variable be for the output?
So I could do this:

echo %output% >>textfile.txt

As for the contents of the Textfile, it would only be the output of the for loop (%output%).


0

Response Number 7
Name: Judago
Date: April 25, 2009 at 23:10:22 Pacific
Reply:

The output is the same as it's input, the variable(what ever the variable name used is), but the variable should be changed so that the letters are numbers(of course you will have to extent the definitions to go up to z).

You most certainly could echo the variable into the text file, so long as it is the same variable that was converted.

Set /p output=Enter words to be converted to numbers
for %%a in ("a=654" "b=54687" "c=564" "d=545") do call set output=%%output:%%~a%%
>>textfile echo %output%


0

Response Number 8
Name: notsopro
Date: April 26, 2009 at 00:12:08 Pacific
Reply:

Ok, thanks dude. But, when I got to test it out it doesn't work properly. Here's a interactive test BAT, I'm almost positive the manifest contains values which don't overlap (or that's what statistics tell me). Although, when it write the file it mess some of them up, like "C/c", it adds a few number.

@echo off
set /p qwer=
for %%a in ("A=1e" "B=2e3" "C=4e51" "D=5e123" "E=1e2345" "F=1d" "G=2d3" "H=4d51" "I=5d123" "J=1d2345" "K=1d" "L=2d3" "M=4d51" "N=5d123" "O=1d2345" "P=1c" "Q=2c3" "R=4c51" "S=5c123" "T=1c2345" "U=1b" "V=2b3" "Q=4b51" "X=5b123" "Y=1b2345" "Z=1a" " =2a3") do call set qwer=%%qwer:%%~a%%
echo %qwer%  >>%userprofile%\desktop\text.txt
pause
SetLocal EnableDelayedExpansion
set qwert=
for /F "delims=" %%i in (%userprofile%\desktop\text.txt) do set qwert=!qwert! %%i
set qwer=%qwert%
for %%a in ("1e=A" "2e3=B" "4e51=C" "5e123=D" "1e2345=E" "1d=F" "2d3=G" "4d51=H" "5d123=I" "1d2345=J" "1d=K" "2d3=L" "4d51=M" "5d123=N" "1d2345=O" "1c=P" "2c3=Q" "4c51=R" "5c123=S" "1c2345=T" "1b=U" "2b3=V" "4b51=W" "5b123=X" "1b2345=Y" "1a=Z" "2a3= ") do call set qwer=%%qwer:%%~a%%
echo %qwer%
pause


0

Response Number 9
Name: Judago
Date: April 26, 2009 at 01:26:29 Pacific
Reply:

You didn't say anything about letters....


The problem is this, the for loop is going through a list 1 by 1.
And using set %var:occurrence=replacement% to change the values,
this procedure is not case sensitive so the overlap is caused by
letters that have been replaced are themselves being replaced.

Since these seem to be hex values you could just give each letter an
alias and replace them afterwards. Alternatively you could change the
whole way the procedure is done.

Your system does overlap, how do you distinguish between 1d and 1d2345?
Bringing the larger strings to the top of the list solves most of
the problems, but I didn't go over it thoroughly enough to rule out
problems. There are also a couple of errors in your script apparently
f and k are both 1d and w doesn't exist in the first conversion.

I had a quick go at fixing it up and had closer sucess, but since it's your baby.....
I used extended ascii characters(dos bar symbols to be exact) as aliases
to avoid conflicts.

@echo off
SetLocal EnableDelayedExpansion
set /p qwer=
for %%a in ("A=1º" "B=2º3" "C=4º51" "D=5º123" "E=1º2345" "F=1¼" "G=2¼3" "H=4¼51" "I=5¼123" "J=1¼2345" "K=1¼" "L=2¼3" "M=4¼51" "N=5¼123" "O=1¼2345" "P=1»" "Q=2»3" "R=4»51" "S=5»123" "T=1»2345" "U=1È" "V=2È3" "W=4È51" "X=5È123" "Y=1È2345" "Z=1É" " =2É3") do set qwer=!qwer:%%~a!
for %%a in ("É=a" "È=b" "»=c" "¼=d" "º=e" "Î=f") do set qwer=!qwer:%%~a!
echo %qwer%  >>"%userprofile%\desktop\text.txt"
pause

set qwert=
for /F "usebackq delims=" %%i in ("%userprofile%\desktop\text.txt") do set qwert=!qwert! %%i
set qwer=%qwert%
for %%a in ("5d123=N" "1d2345=O" "1b2345=Y" "5d123=I" "1d2345=J" "1e2345=E" "1c2345=T" "5e123=D" "5c123=S" "5b123=X" "4b51=W" "4c51=R" "4d51=H" "4e51=C" "4d51=M" "2e3=B"  "2d3=G" "1d=K" "2d3=L" "1c=P" "2c3=Q" "1b=U" "2b3=V" "1a=Z" "2a3= " "1e=A" "1d=F") do call set qwer=%%qwer:%%~a%%
echo %qwer%
pause


0

Response Number 10
Name: notsopro
Date: April 26, 2009 at 10:01:59 Pacific
Reply:

Ok thanks man, sorry to have to have done that to you, it was late lastnight when I compiled that list. So I can't use letters that are being converted (like: Y=6y443) because the the letters in the value will be switched with the remaining numbers. So I could use symbols like these?:


øúÃè☺☻♥♦♣♠•◘○♀§»σÆç¥┐╖ƒ█
ffl∏∑√∞∫≈≠≤≥◊∆∂↙↘↗↖↕↔↓→↑←⅟⅞⅝⅜⅛⅚⅙⅘⅗⅖⅕⅔⅓℮Ω™℠℗№ℓ΅΄;͵ʹ̨̧̦̈́˛˜
̆ ̊¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶¸¹º»¼½¾¿▒

And I can use characters from other languages, correct?:

Завдяки Вашим чудовим людиною


0

Response Number 11
Name: Judago
Date: April 26, 2009 at 13:55:47 Pacific
Reply:

You will be able to use some extended ansi but most characters for other languages fall into a different category. Ascii/Ansi uses a single byte to represent a character 00 - ff, where something like unicode uses two bytes, 00 00 - ff ff.


0

Response Number 12
Name: Judago
Date: April 26, 2009 at 14:19:24 Pacific
Reply:

I just also want to point out that it is probably not very good practice to use extended Ansi in batch file. Some characters will work and if memory serves me correctly some may not. It's trial and error, it works but it can get confusing quickly if it's used too much.


0

Response Number 13
Name: notsopro
Date: April 26, 2009 at 20:47:21 Pacific
Reply:

Thanks man so much, it really helped. My end result is perfect and is a bullseye on what I wanted to achieve.

Have a good one Judago,
Notsopro



0

Sponsored Link
Ads by Google
Reply to Message Icon






Post Locked

This post is quite old and has been locked from receiving new replies. Please create a new posting instead.


Go to Programming Forum Home


Sponsored links

Ads by Google


Results for: Tricky Batch File Code?

Batch File Code Required www.computing.net/answers/programming/batch-file-code-required/19847.html

FTP batch file www.computing.net/answers/programming/ftp-batch-file/9027.html

need help making a batch file work www.computing.net/answers/programming/need-help-making-a-batch-file-work-/14441.html