Batch file to edit an .ini

I have a program for which a setting in the .ini file seems to constantly revert. I find myself constantly checking the file to see if it needs to be edited, so I would like to see if I can come up with a batch file that will do this job. The idea is to create this batch file to scan the .ini file every 2 minutes to check the value of a particular line and change the value if necessary. The line is:

UpdateSpeedCore=8

8 is the desired number for the check, but it sometimes reverts to 100.

The name of the file is prolasso.ini and the path is C:\Documents and Settings\Administrator\Application Data\ProcessLasso\config\prolasso.ini.

Thankyou to anyone who can help with this annoyance...

Edit: More on the .ini file. There are no empty lines. However, there are some lines that are set "=" to no value like "Power=". There are maybe half a dozen section delineators in the file like "[Debug]" or "[AdvancedRules]". These are not set equal to a value. It's a static length lines wise and about 100 lines long. Other than the section delineators, all the lines use an "=" sign followed by a value. These are preceded by the setting name as in "UpdateSpeedCore".

3

4 Answers

On Windows you can use IniFile to manipulate the contents of .ini files from batch scripts. IniFile operations are idempotent.

inifile.exe "C:\Documents and Settings\Administrator\Application Data\ProcessLasso\config\prolasso.ini" UpdateSpeedCore=8 

This expects the UpdateSpeedCheck=8 to be on a line by itself with no spaces.

It uses a helper batch file called repl.bat from - which you can put in the same folder.

@echo off set "file=C:\Documents and Settings\Administrator\Application Data\ProcessLasso\config\prolasso.ini" :loop findstr "^UpdateSpeedCheck=8$" "%file%" >nul || ( type "%file%"|repl "^UpdateSpeedCheck=.*" "UpdateSpeedCheck=8" >"%file%.tmp" move "%file%.tmp" "%file%" >nul ) ping -n 120 localhost >nul goto :loop 
5
@echo off echo. >prolasso.new FOR /F "delims=\= tokens=1,2" %%K IN (prolasso.ini) DO ( IF "%%K" NEQ "UpdateSpeedCheck" ( >>prolasso.new echo %%K=%%L ) else ( >>prolasso.new echo %%K=8 ) ) del prolasso.ini ren prolasso.new prolasso.ini 

note: this solution will delete empty lines.

edit: solved the problem with the additional space on every run (take care, that there is no space after echo %%K=%%L). This should also solve the problem with some-thousand-runs (probably because of the big line-length)

7

should work on all platforms and can be used to read and update the ini file in a robust and simple way.

crudini --set prolasso.ini '' UpdateSpeedCore 8 

Putting it in a loop:

:loop crudini --set prolasso.ini '' UpdateSpeedCore 8 ping localhost -n 121 > nul goto loop 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like