Board logo

标题: [文本处理] [已解决]批处理如何修改指定文件下某行的内容? [打印本页]

作者: huangbo8290    时间: 2019-1-9 13:07     标题: [已解决]批处理如何修改指定文件下某行的内容?

本帖最后由 huangbo8290 于 2019-1-10 13:13 编辑

XP系统文件是在C:\windows\system32
WIN7系统文件是在C:\windows\SysWOW64
原内容:
[HTTP_SERVER]
default.Host=10.73.189.14
default.Method=0
default.Port=7010
default.WebAppName=eapdomain
default.CHARSET = UTF-8

要把default.Host=10.73.189.14修改成default.Host=128.36.10.114其余的内容不变
作者: huangbo8290    时间: 2019-1-9 13:24

希望能增加批处理文件放在桌面就能查找到此文件后进行修改,而不是放在文件原目录下在运行批处理。
作者: huangbo8290    时间: 2019-1-9 14:07

文件:
作者: xczxczxcz    时间: 2019-1-9 15:10

本帖最后由 xczxczxcz 于 2019-1-9 19:35 编辑

win7 可能需要权限
  1. $file='C:\windows\SysWOW64\eapagent.txt'
  2. $(GC $file |%{$_ -replace '(?<host>.*)=\d+(\.\d+){3}','${host}=128.36.10.114'}) | sc $file -force
复制代码

作者: yhcfsr    时间: 2019-1-9 16:11

本帖最后由 yhcfsr 于 2019-1-9 18:38 编辑
  1. @echo off
  2. set "IP=128.36.10.114"
  3. ver|find "5.1"&&cd/d "C:\windows\system32"||cd/d "C:\windows\SysWOW64"
  4. ren eapagent.txt  eapagent.txt ||(echo;权限不够或文件不存在&pause&exit)
  5. (for /f "tokens=1*delims==" %%a in (eapagent.txt) do (
  6. if "%%b"=="" (echo;%%a
  7. ) else if "%%a"=="default.Host" (echo;%%a=%IP%
  8. ) else (echo;%%a=%%b)
  9. ))>tmp
  10. move /y tmp eapagent.txt>NUL&&echo;修改完成
  11. pause
复制代码

作者: ivor    时间: 2019-1-9 19:44

本帖最后由 ivor 于 2019-1-9 20:06 编辑

转载自:https://gallery.technet.microsof ... 0-bf32-eca99b4e42f4
  1. $path = "C:\windows\SysWOW64\eapagent.ini"
  2. $ini=Get-IniContent $path
  3. $ini["HTTP_SERVER"]["default.Host"]="128.36.10.115"  
  4. Out-IniFile -InputObject $ini -FilePath $path -Force  
  5. Function Get-IniContent {  
  6.       
  7.     [CmdletBinding()]  
  8.     Param(  
  9.         [ValidateNotNullOrEmpty()]  
  10.         [ValidateScript({(Test-Path $_) -and ((Get-Item $_).Extension -eq ".ini")})]  
  11.         [Parameter(ValueFromPipeline=$True,Mandatory=$True)]  
  12.         [string]$FilePath  
  13.     )  
  14.       
  15.     Begin  
  16.         {Write-Verbose "$($MyInvocation.MyCommand.Name):: Function started"}  
  17.          
  18.     Process  
  19.     {  
  20.         Write-Verbose "$($MyInvocation.MyCommand.Name):: Processing file: $Filepath"  
  21.               
  22.         $ini = @{}  
  23.         switch -regex -file $FilePath  
  24.         {  
  25.             "^\[(.+)\]$" # Section  
  26.             {  
  27.                 $section = $matches[1]  
  28.                 $ini[$section] = @{}  
  29.                 $CommentCount = 0  
  30.             }  
  31.             "^(;.*)$" # Comment  
  32.             {  
  33.                 if (!($section))  
  34.                 {  
  35.                     $section = "No-Section"  
  36.                     $ini[$section] = @{}  
  37.                 }  
  38.                 $value = $matches[1]  
  39.                 $CommentCount = $CommentCount + 1  
  40.                 $name = "Comment" + $CommentCount  
  41.                 $ini[$section][$name] = $value  
  42.             }   
  43.             "(.+?)\s*=\s*(.*)" # Key  
  44.             {  
  45.                 if (!($section))  
  46.                 {  
  47.                     $section = "No-Section"  
  48.                     $ini[$section] = @{}  
  49.                 }  
  50.                 $name,$value = $matches[1..2]  
  51.                 $ini[$section][$name] = $value  
  52.             }  
  53.         }  
  54.         Write-Verbose "$($MyInvocation.MyCommand.Name):: Finished Processing file: $FilePath"  
  55.         Return $ini  
  56.     }  
  57.          
  58.     End  
  59.         {Write-Verbose "$($MyInvocation.MyCommand.Name):: Function ended"}  
  60. }
  61. Function Out-IniFile {  
  62.       
  63.     [CmdletBinding()]  
  64.     Param(  
  65.         [switch]$Append,  
  66.          
  67.         [ValidateSet("Unicode","UTF7","UTF8","UTF32","ASCII","BigEndianUnicode","Default","OEM")]  
  68.         [Parameter()]  
  69.         [string]$Encoding = "Unicode",  
  70.          
  71.         [ValidateNotNullOrEmpty()]  
  72.         [ValidatePattern('^([a-zA-Z]\:)?.+\.ini$')]  
  73.         [Parameter(Mandatory=$True)]  
  74.         [string]$FilePath,  
  75.          
  76.         [switch]$Force,  
  77.          
  78.         [ValidateNotNullOrEmpty()]  
  79.         [Parameter(ValueFromPipeline=$True,Mandatory=$True)]  
  80.         [Hashtable]$InputObject,  
  81.          
  82.         [switch]$Passthru  
  83.     )  
  84.       
  85.     Begin  
  86.         {Write-Verbose "$($MyInvocation.MyCommand.Name):: Function started"}  
  87.          
  88.     Process  
  89.     {  
  90.         Write-Verbose "$($MyInvocation.MyCommand.Name):: Writing to file: $Filepath"  
  91.          
  92.         if ($append) {$outfile = Get-Item $FilePath}  
  93.         else {$outFile = New-Item -ItemType file -Path $Filepath -Force:$Force}  
  94.         if (!($outFile)) {Throw "Could not create File"}  
  95.         foreach ($i in $InputObject.keys)  
  96.         {  
  97.             if (!($($InputObject[$i].GetType().Name) -eq "Hashtable"))  
  98.             {  
  99.                 #No Sections  
  100.                 Write-Verbose "$($MyInvocation.MyCommand.Name):: Writing key: $i"  
  101.                 Add-Content -Path $outFile -Value "$i=$($InputObject[$i])" -Encoding $Encoding  
  102.             } else {  
  103.                 #Sections  
  104.                 Write-Verbose "$($MyInvocation.MyCommand.Name):: Writing Section: [$i]"  
  105.                 Add-Content -Path $outFile -Value "[$i]" -Encoding $Encoding  
  106.                 Foreach ($j in $($InputObject[$i].keys | Sort-Object))  
  107.                 {  
  108.                     if ($j -match "^Comment[\d]+") {  
  109.                         Write-Verbose "$($MyInvocation.MyCommand.Name):: Writing comment: $j"  
  110.                         Add-Content -Path $outFile -Value "$($InputObject[$i][$j])" -Encoding $Encoding  
  111.                     } else {  
  112.                         Write-Verbose "$($MyInvocation.MyCommand.Name):: Writing key: $j"  
  113.                         Add-Content -Path $outFile -Value "$j=$($InputObject[$i][$j])" -Encoding $Encoding  
  114.                     }  
  115.                      
  116.                 }  
  117.                 Add-Content -Path $outFile -Value "" -Encoding $Encoding  
  118.             }  
  119.         }  
  120.         Write-Verbose "$($MyInvocation.MyCommand.Name):: Finished Writing to file: $path"  
  121.         if ($PassThru) {Return $outFile}  
  122.     }  
  123.          
  124.     End  
  125.         {Write-Verbose "$($MyInvocation.MyCommand.Name):: Function ended"}  
  126. }
复制代码

作者: huangbo8290    时间: 2019-1-10 13:11

回复 5# yhcfsr
谢谢,完美解决!
作者: huangbo8290    时间: 2019-1-10 13:11

yhcfsr 发表于 2019-1-9 16:11



    很感谢
作者: 滴血雄鹰    时间: 2019-1-13 16:00

yhcfsr 发表于 2019-1-9 16:11



   
批处理如何批量修改指定文件夹中文件的内容?
例:
c:\111\system.ini中有一段:pcname=AAA
想要将AAA改成123,批处理怎么写?




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2