Jump to content

Recommended Posts

Hello guys i am new to regular expression and i am figuring out how to give users a choice to change the argument in [0-90]. For example, user can change [0-90] to [5-60]...

 

Batch file Script

findstr /R /C:"Maximumpasswordage(days):[0-90]" final.doc

if %errorlevel%==0 (

echo Maximum_Password_Age_Requirement:Pass  >> C:\final.doc

) else (

echo Maximum_Password_Age_Requirement:Fail >> C:\final.doc

)

 

 

$batch_contents = preg_replace('', 'findstr /R /C:"'.$newArgument.'"', $batch_contents);

Link to comment
https://forums.phpfreaks.com/topic/208155-php-replace-string-in-batch-file/
Share on other sites

findstr /R /C:"Maximumpasswordage(days):[0-90]" final.doc

 

(Maximumpasswordage\(days\):\[)([^\]]+)

 

The part of the string not matched in preg_replace

Capture what is matched

Match some literal text to isolate what you are wanting to replace.  couple of backslashes thrown in there to match literally because parenthesis and square brackets are special characters in regex

Negative character class: match 1 or more character that is not a closing square bracket. This matches your x-y between the opening and closing brackets.

 

'${1}'.$newArgument

 

$1 a temporary variable containing the first captured group of the pattern (the red stuff above).  This is captured because a preg_replace replaces everything matched in the pattern.  So you need to capture the stuff you are matching but not actually replacing, so that you can put it into the replacement so you don't lose it. 

 

The {} wrapped around the 1 is to prevent ambiguity.  if $newArgument is "5-60", what happens normally is preg_replace tries to parse "$15-60" so it tries to use $15 (which doesn't exist) instead of $1.  So the {} is used to tell preg_replace that you want $1 not $15.

Hmm i would like users to to able to change text inside "Success or Failure" while retaining the whitespace between : and S.

findstr /i /C:"Privileged Account Logon: Success or Failure"

 

I have tried this regex but i still cant make it to work...

preg_replace('~(Privileged Account Logon:)(\s[a-z]+)~','${1}'.$newArgument, $batch_contents)

okay i have solved it...but i have another question...

 

whenever users input nothing into a form and clicks update, my regex replace function would stop working because my argument would be blank. I have put

if(isset($_POST['submit']) && $_POST['submit'] == "Update") but it php still reads from the form..

Alright so basically if user inputs nothing in the text field..my code will cock up and change into systeminfo | findstr /i /C:"" . If i try to input some text into it, it will still appear as blank...

 

 

Batch file

@echo off 

rem systeminfo | findstr OS | findstr -v BIOS >> hi.txt
rem findstr /C:"OS Version:                5.1.2600 Service Pack 2 Build 2600" final.doc
rem cd C:\UnxUtils\usr\local\wbin
rem systeminfo | grep -w "\(OS Name\|OS Version\)" >> final.doc


systeminfo | findstr /i /C:"OS Version" | findstr -v BIOS >> C:\final.doc


systeminfo | findstr /i /C:"Service pack 2" 
if %errorlevel%==0 (
echo Service_Pack_Requirement:Pass  >> C:\final.doc
) else (
echo Service_Pack_Requirement:Fail >> C:\final.doc
)

 

 

Replace string php file

<?php
$batch_file = 'service_pack.bat';
$batch_contents = file_get_contents($batch_file);


if(isset($_POST['submit']) && $_POST['submit'] == "Update")
{

$newArgument = $_POST['argument']; 
$batch_contents = preg_replace('~findstr /i /C:"([a-z0-9_ -]+)"~i', 'findstr /i /C:"'.$newArgument.'"', $batch_contents);


file_put_contents($batch_file, $batch_contents);
}
?>


<p>
<form action="replaceservicepack.php" method="post">
Change argument: <input type="text" name="argument"<br>
<input type="submit" name="submit" value="Update">  
<input type="button" value="Cancel" onclick="history.go(-1);">
</form>
</p>

never mind about the above, i managed to work around it:)

 

I would like to replace the string in this line -> $batch_file1 = 'service_pack.bat'; It is located on another php file. I have tried doing it for an hour but to no avail, can someone guide me? Thanks!

 

<?php

$file = 'C:\xampp\htdocs\new\editpolicy.php';
$batch_contents = file_get_contents($file);

if(isset($_POST['argument']) && $_POST['submit'] == "Save")
{

$newArgument = $_POST['argument'];

preg_replace('~$\batch_file1 = "([a-z0-9_ -]+)"~i', '$\batch file1 = "'.$newArgument.'"' ,$batch_contents);
}file_put_contents($file, $batch_contents);

?>


<b>Deploy Service Pack Policy</b>
<p>
<form action="deploy.php" method="post">
Select audit file to deploy: <input type="text" name="argument"<br>
<input type="submit" name="submit" value="Save">  <p>
</form>
</p> 

thanks man..but i have another question..

 

Right now i am doing an edit policy function which uses the power of regular expression(preg_replace). But i have a problem here. The below is the text output from the DOS command whereby i will need to edit the START_TYPE of the following services. My question is how to make preg_replace to differentiate the START_TYPE that belongs to each service?? or do i have to separate each service  to its own text file instead of combining all the services?

 

START_TYPE:DISABLED

DISPLAY_NAME:Alerter

START_TYPE:AUTO_START

DISPLAY_NAME:AutomaticUpdates

START_TYPE:DEMAND_START

DISPLAY_NAME:BackgroundIntelligentTransferService

START_TYPE:DISABLED

DISPLAY_NAME:ClipBook

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.