- 帖子
- 126
- 积分
- 166
- 技术
- 1
- 捐助
- 0
- 注册时间
- 2021-5-27
|
本帖最后由 jave000 于 2021-9-10 10:12 编辑
同类搜索简述:
按创建和修改时间将一批文本文件,从一个文件夹批量复制到另一个文件夹,并且两个文件夹的路径中间都有一个变量,需要手动输入,以及其中一个路径涉及到桌面,但为了可以分享给同事使用,识别任意电脑名下的桌面路径。
同时对所有文本的内容,筛出以序号为行首的内容,并对其进行分列,再转换到csv文件,同时增加一列生成其文本文件名。
同时自动打开excel。
复杂度:多行文本在分列后,同一列的部分内容要归入同一个单元格。其中部分列的内容只有一行。
感谢楼下诸位
@powershell -c "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" & exit /b
set-location $PSScriptRoot
$jave = read-host "roject Model Folder"
$CXMPV = [Environment]::GetFolderPath("Desktop")
$order = "2,3,4,5,6,1"
$sour = "\\btssvr9\pds1\$jave\3d\\iso_dgn\MOC_2021\"
$dest = "$CXMPV\Print\"
do
{
$minute = read-host "Minutes of Minutes"
$minute = $minute.trim()
}
while ($minute -match "\D")
Get-ChildItem -Path $sour -File |
Where-Object { ($_.CreationTime -gt (get-date).AddMinutes(-$minute)) -or ($_.LastWriteTime -gt (get-date).AddMinutes(-$minute)) } |
foreach-object {
write-host $_.fullname
copy-item $_.fullname -Destination $dest
}
Invoke-Item $sour
Remove-Item $dest* -Include z-mto.csv
if (-not ([string]::IsNullOrEmpty($args[0])))
{
$sour = $args[0]
}
function zget-data()
{
[System.Collections.ArrayList] $sirenas = @()
$rem = "^\s{3}\d{1}|^\s{2}\d{2}|^\s{11,12}\S.+"
$renfs = "(\w{4})(\w{1,4})?(\w{1,4})?(\w{1,5})?(.*)"
$renfd = "`$1-`$2-`$3-`$4-`$5"
$res = "`n(.{4})(.{46})(.{13})(.{15})(.+)((?:`n\s{11,12}.+)*)"
#$res = "`n\s{2,3}(\d{1,2})\s{4,}(\S.+?\S)\s{2,}(\d+(?:X\d+)?)\s{2,}(\S+(?:\s\S+)*)\s{2,}(\d+(?:[.]\d+)?(?:\sM)?)((?:`n\s{11,12}.+)*)"
$red = "`t`$1`t`$2`$6`t`$3`t`$4`t`$5::"
Get-ChildItem -path $sour "*.prt" | foreach-object {
write-host " "$_.basename
$nf = $_.basename.ToUpper() -replace $renfs,$renfd -replace "-+$","";
$a = "`n" + ((get-content -Encoding utf8 -path $_.fullname ) -match $rem -join "`n") ;
if ( $a.length -gt 1 )
{
$a = $a -replace $res,$red -replace "[ `n]+"," " -replace " *`t *","`t"
$a = $a -replace ":","" -replace "::","`n" -replace "(?m)\sm$","" -replace "(?m)^(?=`t)",$nf
$sirenas.add($a) | out-null
}
}
$sirenas = $sirenas -split "`n"
$reos = "^([^`t]*)`t([^`t]*)`t([^`t]*)`t([^`t]*)`t([^`t]*)`t([^`t]*)$"
$reod = $order -replace ",","`t" -replace "(?=\d)","`$"
$sirenas = $sirenas -replace $reos, $reod
return $sirenas
}
function zout-csv()
{
$reos = "^([^`t]*)`t([^`t]*)`t([^`t]*)`t([^`t]*)`t([^`t]*)`t([^`t]*)$"
$reod = '"$1","$2","$3","$4","$5","$6"'
$sirenas -replace $reos,$reod | out-file -encoding utf8 ($dest + "z-mto.csv")
}
function zout-excel()
{
try
{
$Excel = New-Object -ComObject Excel.Application -ErrorAction Stop
}
catch
{
return
}
$Excel.Visible = $true
$Workbook = $Excel.Workbooks.Add()
$Sheet = $Workbook.Worksheets.Item(1)
$v = [string[,]]::new($sirenas.count,1)
for ( $i =0 ; $i -lt $sirenas.count ; $i++ )
{
$v[$i,0] = $sirenas[$i]
}
$rng = "A1:A" + $sirenas.count
$Sheet.range($rng).value2 = $v
$colA = $sheet.range("A1").EntireColumn
$colrange = $sheet.range("A1")
$colA.texttocolumns($colrange,1,1,$false,$true,$false,$false,$false) | out-null
$sheet.columns.autofit() | out-null
$Workbook.SaveAs(($PSScriptRoot + "\" + $dest))
$excel.Quit()
[system.GC]::Collect()
}
[System.Collections.ArrayList] $sirenas = @()
$sirenas = zget-data
zout-csv
zout-excel |
|