标题: [问题求助] [已解决]请教powershell提取文本指定字符再替换 [打印本页]
作者: smss 时间: 2020-12-5 15:03 标题: [已解决]请教powershell提取文本指定字符再替换
本帖最后由 smss 于 2020-12-8 13:17 编辑
文本A- # Enable automatic restart after Windows Update installation
- Function EnableUpdateRestart {
- Write-Output "Enabling Windows Update automatic restart..."
- Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\MusNotification.exe" -Name "Debugger" -ErrorAction SilentlyContinue
- }
- # Disable nightly wake-up for Automatic Maintenance and Windows Updates
- Function DisableMaintenanceWakeUp {
- Write-Output "Disabling nightly wake-up for Automatic Maintenance..."
- If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) {
- New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null
- }
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUPowerManagement" -Type DWord -Value 0
- Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\Maintenance" -Name "WakeUp" -Type DWord -Value 0
- }
- #不多还有500条BUG...
复制代码
提取Write-Output "之间的字符" 我的方法不好 正则表达式太难了
生成文本B- powershell "(Gc A.txt) -match 'Write-Output \"(.+?)\"'>B.txt;"
复制代码
- powershell "if(((Gc A.txt) -join \"`r`n\") -match 'Write-Output \"(.+?)\"'){$matches[1]>3.txt};"
复制代码
为什么只有一条 都说ps真香好用 无奈只能用BAT
生成文本C- (for /f "tokens=1,2 delims=-" %%a in (B.txt)do set n=%%b&Echo !n:~8,-1!)>C.txt
复制代码
- Enabling Windows Update automatic restart...
- Disabling nightly wake-up for Automatic Maintenance...
复制代码
翻译文本C得到文本D- 正在启用Windows Update自动重启...
- 禁用夜间唤醒以进行自动维护...
复制代码
文本D替换掉文本A Write-Output "要翻译的部分"
作者: WHY 时间: 2020-12-7 21:13
本帖最后由 WHY 于 2020-12-8 10:30 编辑
1.提取 a.txt 文本 Write-Output "之间的字符"到 b.txt- $arr = (gc a.txt -ReadCount 0) -match 'Write-Output +"(?>[^"]+)"' | forEach {$_.Split('"')[1]};
- sc b.txt -Value $arr;
复制代码
2.文本 b.txt 翻译后保存到 c.txt
3.文本 c.txt 替换 a.txt 对应文字,写入 d.txt- $global:n = 0;
- $arr = (gc c.txt -ReadCount 0) -notmatch '^\s*$';
- $str = (gc a.txt -ReadCount 0) -join "`r`n";
- $str = [regex]::Replace($str, '(?<=(?i)Write-Output +")(?>[^"]+)(?=")', {$arr[$global:n++]});
- sc d.txt -Value $str;
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |