Hyflex Posted December 19, 2020 Share Posted December 19, 2020 Hi, I use ThunderBird Portable and I have a copy on my computer but I also regularly update the copies on my laptop and personal computer but every time I do this i have to update the paths of where configuration files exist otherwise it breaks. I'm looking for a better way to cycle through every single file and automatically update the paths because whenever a new Thunderbird update comes out there is always some files that I need to update that aren't in my list.... The default installation folder is listed in multiple ways throughout the files from: C:\Users\Hyflex\Downloads\New E-Mail\ C:\\Users\\Hyflex\\Downloads\\New E-Mail\\ C:\\\Users\\\Hyflex\\\Downloads\\\New E-Mail\\\ C:\\\\\\\\Users\\\\\\\\Hyflex\\\\\\\\Downloads\\\\\\\\New E-Mail\\\\\\\\ C:/Users/Hyflex/Downloads/New E-Mail/ C://Users//Hyflex//Downloads//New E-Mail// C:///Users///Hyflex///Downloads///New E-Mail/// C:////////Users////////Hyflex////////Downloads////////New E-Mail//////// I need to keep their same structure throughout the files... Currently I have a little autoit script that replaces my desktop path with the new path: expandcollapse popup$SZFILE = @ScriptDir & "\ThunderbirdPortable\Data\settings\ThunderbirdPortableSettings.ini" $SZTEXT = FileRead($SZFILE, FileGetSize($SZFILE)) $SZTEXT = StringReplace($SZTEXT, "C:\Users\Hyflex\Downloads\New E-Mail\", @ScriptDir & "\", 0, 1) FileDelete($SZFILE) FileWrite($SZFILE, $SZTEXT) $SZFILE = @ScriptDir & "\ThunderbirdPortable\Data\profile\compatibility.ini" $SZTEXT = FileRead($SZFILE, FileGetSize($SZFILE)) $SZTEXT = StringReplace($SZTEXT, "C:\Users\Hyflex\Downloads\New E-Mail\", @ScriptDir & "\", 0, 1) FileDelete($SZFILE) FileWrite($SZFILE, $SZTEXT) $SZFILE = @ScriptDir & "\ThunderbirdPortable\Data\profile\extensions.ini" $SZTEXT = FileRead($SZFILE, FileGetSize($SZFILE)) $SZTEXT = StringReplace($SZTEXT, "C:\Users\Hyflex\Downloads\New E-Mail\", @ScriptDir & "\", 0, 1) FileDelete($SZFILE) FileWrite($SZFILE, $SZTEXT) $SZFILE = @ScriptDir & "\ThunderbirdPortable\Data\profile\extensions.json" $SZTEXT = FileRead($SZFILE, FileGetSize($SZFILE)) $SZTEXT1 = StringRegExpReplace(@ScriptDir & "\", "\\", "\\\\") $SZTEXT = StringReplace($SZTEXT, "C:\\Users\\Hyflex\\Downloads\\New E-Mail\\", $SZTEXT1, 0, 1) FileDelete($SZFILE) FileWrite($SZFILE, $SZTEXT) $SZFILE = @ScriptDir & "\ThunderbirdPortable\Data\profile\prefs.js" $SZTEXT = FileRead($SZFILE, FileGetSize($SZFILE)) $SZTEXT1 = StringRegExpReplace(@ScriptDir & "\", "\\", "\\\\") $SZTEXT = StringReplace($SZTEXT, "C:\\Users\\Hyflex\\Downloads\\New E-Mail\\", $SZTEXT1, 0, 1) FileDelete($SZFILE) FileWrite($SZFILE, $SZTEXT) $SZFILE = @ScriptDir & "\ThunderbirdPortable\Data\profile\prefs.js" $SZTEXT = FileRead($SZFILE, FileGetSize($SZFILE)) $SZTEXT1 = StringRegExpReplace(@ScriptDir & "\", "\\", "\\\\\\\\") $SZTEXT = StringReplace($SZTEXT, "C:\\\\Users\\\\Hyflex\\\\Downloads\\\\New E-Mail\\\\", $SZTEXT1, 0, 1) FileDelete($SZFILE) FileWrite($SZFILE, $SZTEXT) $SZFILE = @ScriptDir & "\ThunderbirdPortable\Data\profile\panacea.dat" $SZTEXT = FileRead($SZFILE, FileGetSize($SZFILE)) $SZTEXT1 = StringRegExpReplace(@ScriptDir & "\", "\\", "\\\\") $SZTEXT = StringReplace($SZTEXT, "C:\\Users\\Hyflex\\Downloads\\New E-Mail\\", $SZTEXT1, 0, 1) FileDelete($SZFILE) FileWrite($SZFILE, $SZTEXT) $SZFILE = @ScriptDir & "\ThunderbirdPortable\Data\profile\search.json" $SZTEXT = FileRead($SZFILE, FileGetSize($SZFILE)) $SZTEXT1 = StringRegExpReplace(@ScriptDir & "\", "\\", "\\\\") $SZTEXT = StringReplace($SZTEXT, "C:\\Users\\Hyflex\\Downloads\\New E-Mail\\", $SZTEXT1, 0, 1) FileDelete($SZFILE) FileWrite($SZFILE, $SZTEXT) $SZFILE = @ScriptDir & "\ThunderbirdPortable\Data\profile\pluginreg.dat" $SZTEXT = FileRead($SZFILE, FileGetSize($SZFILE)) $SZTEXT = StringReplace($SZTEXT, "C:\Users\Hyflex\AppData\Roaming\", @AppDataDir & "\", 0, 1) FileDelete($SZFILE) FileWrite($SZFILE, $SZTEXT) $SZFILE = @ScriptDir & "\ThunderbirdPortable\App\thunderbird\uninstall\uninstall.update" $SZTEXT = FileRead($SZFILE, FileGetSize($SZFILE)) $SZTEXT = StringReplace($SZTEXT, "C:\Users\Hyflex\AppData\Local\", @LocalAppDataDir & "\", 0, 1) FileDelete($SZFILE) FileWrite($SZFILE, $SZTEXT) $SZFILE = @ScriptDir & "\ThunderbirdPortable\App\thunderbird\uninstall\uninstall.update" $SZTEXT = FileRead($SZFILE, FileGetSize($SZFILE)) $SZTEXT = StringReplace($SZTEXT, "C:\Users\Hyflex\Downloads\New E-Mail\", @ScriptDir & "\", 0, 1) FileDelete($SZFILE) FileWrite($SZFILE, $SZTEXT) $SZFILE = @ScriptDir & "\ThunderbirdPortable\Data\profile\startupCache\startupCache.4.little" $SZTEXT = FileRead($SZFILE, FileGetSize($SZFILE)) $SZTEXT1 = StringRegExpReplace(@ScriptDir & "\", "\\", "/") $SZTEXT1 = StringRegExpReplace($SZTEXT1, " ", "%20") $SZTEXT = StringReplace($SZTEXT, "C:/Users/Hyflex/Downloads/New%20EMail/", $SZTEXT1, 0, 1) FileDelete($SZFILE) FileWrite($SZFILE, $SZTEXT) Anyone have any ideas how I can improve this? I'd much appreciate some help! Link to comment Share on other sites More sharing options...
orbs Posted December 19, 2020 Share Posted December 19, 2020 i'm using the portable version of Thunderbird, making sync between devices very simple (typically between my desktop and a thumb drive). for replacing strings in multiple files, i've been using fnr.exe (the command line). i just revisited it to see if there are any updates, it took a while but i found it was moved to this site. Signature - my forum contributions: Spoiler UDF: LFN - support for long file names (over 260 characters) InputImpose - impose valid characters in an input control TimeConvert - convert UTC to/from local time and/or reformat the string representation AMF - accept multiple files from Windows Explorer context menu DateDuration - literal description of the difference between given dates Apps: Touch - set the "modified" timestamp of a file to current time Show For Files - tray menu to show/hide files extensions, hidden & system files, and selection checkboxes SPDiff - Single-Pane Text Diff Link to comment Share on other sites More sharing options...
MaximusCZ Posted December 22, 2020 Share Posted December 22, 2020 Also using what orbs said, its a great tool. Would be even better if regex werent my nemesis Link to comment Share on other sites More sharing options...
iamtheky Posted December 22, 2020 Share Posted December 22, 2020 (edited) working backwards, looks like you just need to replace the dividers. Can probably run them all through the same func. #include<array.au3> local $aTest[6]=["C:\test1\test2\test3" , "C:\\test1\\test2\\test3" , "C:\\\test1\\\\test2\\\\test3" , "C:/test1/test2/test3" , "C:///test1///test2///test3" , "C:////test1////test2/////test3" ] $aScriptDir = stringsplit(@ScriptDir , "\" , 2) For $i = 0 to ubound($aTest) - 1 $sDiv = stringregexp($aTest[$i] , "\w:(.*?)\w" , 3)[0] $aTest[$i] = "" For $j = 0 to ubound($aScriptDir) - 1 $aTest[$i] &= $aScriptDir[$j] & $sDiv Next Next _ArrayDisplay($aTest) try 2, same result (hopefully) but a little more portable. probably still needs cleaning to verify the drive letter and catch edge cases, but definitely doable. #include<array.au3> local $aTest[6]=["C:\test1\test2\test3" , "C:\\test1\\test2\\test3" , "C:\\\test1\\\\test2\\\\test3" , "C:/test1/test2/test3" , "C:///test1///test2///test3" , "C:////test1////test2/////test3" ] For $i = 0 to ubound($aTest) - 1 $aTest[$i] = StringReplace(@ScriptDir , "\" , stringregexp($aTest[$i] , "\w:(.*?)\w" , 3)[0]) Next _ArrayDisplay($aTest) Edited December 23, 2020 by iamtheky ,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-. |(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/ (_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_) | | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) ( | | | | |)| | \ / | | | | | |)| | `--. | |) \ | | `-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_| '-' '-' (__) (__) (_) (__) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now