Jump to content

Recommended Posts

Posted

Hi,

I'm trying to make a password updater for a batch file.

I need to replace -s"old password" with -s"new password"

Where old password and new password are strings using any keyboard character except " or '.

I can open the file, read it into a string (it's not very long) and, as a test, replace a fixed string with a new password entered from a text box, but that's not good enough, and I'm having great difficulty moving on to the next step.

I've tried using "-s\"" & $newpassword & "\""

and also '-s\"' & $newpassword & '"' (both directly in the stringreplace command, and also by setting them as an intermediate variable, and using that in the stringreplace).

but neither works as the replacement string.

What am I doing wrong?

Also, I'm not sure how to select the string to replace - I had though

"-s\"?\""

or

'-s"?"'

but I think they will have the same problem (and I'm assuming that ? will select any number of any character between the two inverted commas?)

Could anyone please help a newbie?!

Thanks,

William

Posted (edited)

I'm not that good with StringRegExp so here is another version.

#include <String.au3>

$string = '-s"old password"'
$new = 'new password'

$aArray = _StringBetween($string, 's"', '"')

ConsoleWrite(StringReplace($string, $aArray[0], $new))
Edited by Pain
Posted

I'm not that good with StringRegExp so here is another version.

#include <String.au3>

$string = '-s"old password"'
$new = 'new password'

$aArray = _StringBetween($string, 's"', '"')

ConsoleWrite(StringReplace($string, $aArray[0], $new))

Thanks - a different approach that looks basically simpler.

However, it didn't work.

I've adapted your script to my variables, and broken it down with a msbox to see what's happening at each stage.

$password is the new password

$sRead is the string read in from the file

script snippet:-

#include <String.au3>

$start = ('-s"')

MsgBox (0, "test $start", $start )

$end = ('" ')

MsgBox (0, "test $end", $end )

$aArray = _StringBetween($sRead, $start, $end)

MsgBox (0, "test $aArray", $aArray )

StringReplace($sRead, $aArray, $password)

end snippet

The message boxes show $sRead, $start and $end as intended but $aArray fails to show the text between $start and $end.

What have I done wrong?

William

Posted (edited)

#include <String.au3>

$sRead = '-s"old password"'

$password = 'new password'

$start = '-s"'

;~ MsgBox (0, "test $start", $start)

$end = '"'

;~ MsgBox (0, "test $end", $end)

$aArray = _StringBetween($sRead, $start, $end)

;~ MsgBox (0, "test $aArray", $aArray )

; You can't show an array without UBound, use UBound in a loop or _ArrayDisplay($aArray)

MsgBox(0, "", StringReplace($sRead, $aArray[0], $password)); Same as above, you can't show an array if you don't pick an element. In this case it's 0

Edited by Pain
Posted

Sorry, you've lost me there...

So I can't display the array easily.

How do I replace the array in the original string with the new password string?

(Trying to display the array was only so I could debug)

William

Posted

I guess I have to do it all for you, good for you I feel generous today.

Uncomment the 3 last lines to save it back to your batch file.

#include <String.au3>

$sRead = 'dfg dgd gdgsfsfdghdgsdg -s"old password"sf sdfsdfsdfsdfsdf'; the text from FileRead()
$password = 'new password'; I hope it's obvious what this is...

$start = '-s"'; where to start search from
$end = '"'; where to end the search at

$aArray = _StringBetween($sRead, $start, $end); search in the string
MsgBox(0, "", $aArray[0]); found the old password

$newString = StringReplace($sRead, $aArray[0], $password); replace 
MsgBox($newString); the new string

;~ $file = FileOpen("test.txt", 1)

;~ FileWrite($file, $newString)
;~ FileClose($file)
Posted

I guess I have to do it all for you, good for you I feel generous today.

Uncomment the 3 last lines to save it back to your batch file.

#include <String.au3>

$sRead = 'dfg dgd gdgsfsfdghdgsdg -s"old password"sf sdfsdfsdfsdfsdf'; the text from FileRead()
$password = 'new password'; I hope it's obvious what this is...

$start = '-s"'; where to start search from
$end = '"'; where to end the search at

$aArray = _StringBetween($sRead, $start, $end); search in the string
MsgBox(0, "", $aArray[0]); found the old password

$newString = StringReplace($sRead, $aArray[0], $password); replace 
MsgBox($newString); the new string

;~ $file = FileOpen("test.txt", 1)

;~ FileWrite($file, $newString)
;~ FileClose($file)

Many thanks, Pain.

That works a treat.

I'll just add a few lines to rename original file to xxx.old, create new file with name of the original, and write $sNewString to that. Just makes it safer if there's a glitch while the password is updating.

We newbies are always grateful for the help of the more experienced - I've learned a lot doing this. Trouble is, I get too ambitious and keep attempting to do things beyond my current knowledge!

Regards,

William

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...