我不知道是什么原因造成的,该脚本似乎在Windows 10上有效,但在Windows 7上却不起作用。正在产生问题的函数是limpia()
,它可以清除文本。
新文件已生成,但creplace
或replace
在Windows 7中似乎无法正常工作-因此我得到的文件相同,但名称不同。
感谢您的帮助。
$root = [Environment]::GetFolderPath("Desktop")
$folder = 'C:\Users\JuanMa\Desktop\UNB\TMP\'
$filter = 'FACT_TEMPORAL.TXT'
Write-Host "EL ROOT ES $root" -fore white
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
IncludeSubdirectories = $true
NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}
$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
$path = $Event.SourceEventArgs.FullPath
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "The file '$name' at '$path'was $changeType at $timeStamp" -fore white
limpia
printpdf
borrar
renombra
}
function limpia() {
write-host "FUNCION LIMPIA ARCHIVO TXT" -fore white
$a = get-content $root\UNB\TMP\FACT_TEMPORAL.txt |
Foreach-Object { ($_ -creplace '^[.! pÿ>i@]{1,}') } |
Foreach-Object { ($_ -creplace '^0 {2,}') } |
Foreach-Object { ($_ -replace '>', '') } |
Foreach-Object { ($_.TrimEnd() )} | where {$_ -ne ""} |
set-content $root\UNB\FINAL_TEXTO\FACT_FINAL.txt
}
function printpdf() {
write-host "FUNCION IMPRIMIR A PDF" -fore white
start-process -filepath "$root\UNB\FINAL_TEXTO\FACT_FINAL.txt" -verb print
}
function borrar() {
write-host "FUNCION BORRAR" -fore white
Start-Sleep -s 2
Remove-Item $root\UNB\TMP\FACT_TEMPORAL.txt
}
function renombra() {
write-host "FUNCION RENOMBRAR ARCHIVO" -fore white
Get-Item $root\UNB\FINAL_TEXTO\FACT_FINAL.txt | Rename-Item -NewName {("print-" + '{0:yyyyMMddhhmmss}{1}' -f (Get-Date), ".txt")}
}
答案 0 :(得分:0)
空字符串(例如“”)不是很好,尝试使用$ null。 并查看Powershell中的正则表达式语法,也许比它应该起作用。
答案 1 :(得分:0)
Windows 10 通过MS更新中心进行常规更新,当前使用PowerShell版本:
following-sibling::div[1][@class="reply"]
Windows 7 开箱即用。正如您在答案右侧here中看到的:
PS C:\Users\user> $psversiontable
Name Value
---- -----
PSVersion 5.1.17134.228
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.17134.228
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
我的建议是检查-和使用的命令的兼容性:
-或
编辑: 我的第二个建议是,每当Powershell模块使我失败时,请尝试.NET工具。在这种情况下,我会尝试用-creplace代替:
PS C:\Users\user> get-host
Name : ConsoleHost
Version : 2.0
InstanceId : 61ef8a3b-0212-4743-87a1-eb2c00fb1e29
UI : System.Management.Automation.Internal.Host.InternalHostUserI
nterface
CurrentCulture : en-US
CurrentUICulture : en-US
PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace : System.Management.Automation.Runspaces.LocalRunspace
我还没有检查过模式,您将不得不自己做。由于我不知道文件结构,因此无法给您一个更好的答案,似乎您可以只使用一个foreach循环和一个正则表达式来清理文件。
答案 2 :(得分:0)
非常感谢大家。升级并执行了limpia功能中建议的更改后,它现在可以正常工作。
该功能是
function limpia()
{
$regex = [System.Text.RegularExpressions.Regex]
write-host "FUNCION LIMPIA ARCHIVO TXT" -fore white
$a = get-content $root\UNB\TMP\FACT_TEMPORAL.txt |
Foreach-Object { $regex::Replace($_, '^[.! pÿ>i@]{1,}', '') } |
Foreach-Object { $regex::Replace($_, '^0 {2,}', '') } |
Foreach-Object { $regex::Replace($_, '>', '') } |
Foreach-Object { ($_.TrimEnd() )} | Where-Object {$_ -ne ""} |
set-content $root\UNB\FINAL_TEXTO\FACT_FINAL.txt
}
非常感谢!