【发布时间】:2021-10-10 07:10:13
【问题描述】:
我知道一些编程基础知识,但这个项目远远超出了我的知识范围。任何帮助将不胜感激,在此先感谢您。
有两个带有文本的文件(见下文),我需要检查第一个文件(正则表达式)并使用预定义的模式数组替换另一个文件中的文本。 这是代码和文本文件的示例,这样我会更容易理解我需要什么。
$file = "C:\powershell\changescript\Add.bat"
Add.bat 文件内容:
@Echo Off
cd %systemroot%\system32
Reg.exe add "HKCU\Software\HP\HPTwain" /v "DesktopShortcut" /t REG_SZ /d "Yes" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "ModelName" /t REG_SZ /d "tochange" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "HostName" /t REG_SZ /d "tochange" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "IP Address" /t REG_SZ /d "tochange" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "SerialNo" /t REG_SZ /d "tochange" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "Services" /t REG_SZ /d "PclPrint eSCL LEDM" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "NetworkType" /t REG_SZ /d "Ethernet" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "MAC" /t REG_SZ /d "tochange" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "Manufacturer" /t REG_SZ /d "Hewlett-Packard" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "GUID" /t REG_SZ /d "tochange" /f
xcopy "C:\applications\TwainConfig\*" "%USERPROFILE%\AppData\Local\" /s /i /Y
Cls
Exit
$filemin = "C:\powershell\changescript\pc.txt"
文件pc.txt的内容:
ModelName : HP Color LaserJet Pro M478fxxx
HostName : EPxxxxxx
IP Address : 192.x.x.x
SerialNo : CNBxx3P8WY
Services : PclPrint RestScan eSCL LEDM Fax
MAC : c4651645xxb95
GUID : urn:uuid:8866a4ce-2da1-5b24-6af5-13e5dc7f63b5
这不起作用,但描述了我需要的东西(至少我认为它描述了..)
$filemin = "C:\powershell\changescript\pc.txt"
$findThisAndReplace = @(
$paternchange1 = '"ModelName" /t REG_SZ /d "tochange" /f"',
$paternchange2 = '"HostName" /t REG_SZ /d "tochange" /f"',
$paternchange3 = '"IP Address" /t REG_SZ /d "tochange" /f"',
$paternchange4 = '"SerialNo" /t REG_SZ /d "tochange" /f"',
$paternchange5 = '"MAC" /t REG_SZ /d "tochange" /f"',
$paternchange6 = '"GUID" /t REG_SZ /d "tochange" /f"'
)
$file = "C:\powershell\changescript\AddScan.bat"
$replaceWith = @(
$paternget1 = '"ModelName : *',
$paternget2 = '"HostName : *',
$paternget3 = '"IP Address : *',
$paternget4 = '"SerialNo : *',
$paternget5 = '"MAC : *',
$paternget6 = '"GUID : *'
)
function getsetcontent ($patern, $filemin, $file){
$i=0;
while $1 !> 7
do
(get-content $file) | ForEach-Object {$i++;$_ -Replace $patternchange$i, "$paternget$i"} | Set-Content -Encoding UTF8 $filemin}
合并后的结果应该是:
@Echo Off
cd %systemroot%\system32
Reg.exe add "HKCU\Software\HP\HPTwain" /v "DesktopShortcut" /t REG_SZ /d "Yes" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "ModelName" /t REG_SZ /d "HP Color LaserJet Pro M478fxxx" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "HostName" /t REG_SZ /d "EPxxxxxx" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "IP Address" /t REG_SZ /d "192.x.x.x" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "SerialNo" /t REG_SZ /d "CNBxx3P8WY" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "Services" /t REG_SZ /d "PclPrint eSCL LEDM" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "NetworkType" /t REG_SZ /d "Ethernet" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "MAC" /t REG_SZ /d "c4651645xxb95" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "Manufacturer" /t REG_SZ /d "Hewlett-Packard" /f
Reg.exe add "HKCU\Software\HP\HPTwain" /v "GUID" /t REG_SZ /d "urn:uuid:8866a4ce-2da1-5b24-6af5-13e5dc7f63b5" /f
xcopy "C:\applications\TwainConfig\*" "%USERPROFILE%\AppData\Local\" /s /i /Y
Cls
Exit
【问题讨论】:
-
不错的任务规范。你都尝试了些什么?你目前被困在哪里?
-
嘿,我一直在从这个文件中获取模式 $filemin = "C:\powershell\changescript\pc.txt" 。并将它们放在数组中
标签: arrays regex powershell file