Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 文件名唯一部分的powershell列表_Sorting_Powershell_Unique_Filenames - Fatal编程技术网

Sorting 文件名唯一部分的powershell列表

Sorting 文件名唯一部分的powershell列表,sorting,powershell,unique,filenames,Sorting,Powershell,Unique,Filenames,我有多台机器将文件上传到一个FTP目录。文件名的第一部分是机器,其余部分是时间戳,例如AAAAA_20130312_125113 现在,我想获得一个已上载到此目录的所有唯一计算机的排序列表。 我设法将丢失的所有文件名。子字符串(0,5)写入主机,但我仍然没有唯一的计算机名 $files=Get-ChildItem $strMOVETO -Name -Include TAS*.csv -Recurse ForEach ($i in $files) { Write-Host $i.Substring

我有多台机器将文件上传到一个FTP目录。文件名的第一部分是机器,其余部分是时间戳,例如AAAAA_20130312_125113

现在,我想获得一个已上载到此目录的所有唯一计算机的排序列表。 我设法将丢失的所有文件名。子字符串(0,5)写入主机,但我仍然没有唯一的计算机名

$files=Get-ChildItem $strMOVETO -Name -Include TAS*.csv -Recurse
ForEach ($i in $files) { Write-Host $i.Substring(0,5) }
有没有关于如何做到这一点的提示?不必是一行,尽管这将是一个很好的挑战;-)


谢谢

将命令的结果导入一个
| sort-unique

$files=Get-ChildItem $strMOVETO -Name -Include TAS*.csv -Recurse
ForEach ($i in $files) { Write-Host $i.Substring(0,5) } | sort -unique
…但最好还是简化脚本

$filter = "TAS*.csv"
Get-ChildItem -Path $strMOVETO -Filter $filter -Recurse | % {$_.BaseName.Substring(0,5) } | sort -unique

未测试,但类似于以下内容:

Get-ChildItem $strMOVETO -Name -Include TAS*.csv -Recurse | % { $_.Name.Substring(0,5) } | Sort -Unique

您不需要在循环中写入主机,使用%而不是foreach循环更容易。

当您有一个8个字符的机器名时会发生什么?您的
子字符串将中断。由于机器名、日期和时间由一个
\uuu
分隔,因此在此基础上拆分并获取第一项

Get-ChildItem $strMOVETO -recurse -name -include TAS*.csv|%{$_.split("_")[0]}|sort-object -unique
要同时按日期筛选,请执行以下操作:

Get-ChildItem $strMOVETO -recurse -include TAS*.csv|where-object{$_.lastwritetime -ge (get-date).adddays(-1)}|%{$_.basename.split("_")[1]}|sort-object -unique

机器名长度确实是可变的。假设[1]而不是[0]将接受第二项(如过滤器中的TAS_xxxxxxxx),则在最后一个管道前放置一个},这样就完成了!感谢我将此命令与Where对象{$\ LastWriteTime-ge(Get Date).AddDays(-1)}结合使用?!?如果我省略了-Name标记,则拆分不起作用;如果我使用-Name标记,则LastWriteTime不可用……是的,您可以看到我的编辑。拆分不起作用,因为现在您省略了
-Name
,您得到的是一个对象集合,而不仅仅是一个名称列表。Briliant,您救了我一天;-)请注意,
-Name
-Recurse
组合时,返回(相对)路径,而不仅仅是位于子树下更远位置的文件的文件名,在这种情况下,
$\u.split(“\u”)[0]
将无法按预期工作。作为旁白:,除非目的是仅写入显示,从而绕过PowerShell的成功输出流,从而能够将输出发送到其他命令、在变量中捕获或重定向到文件。也就是说,在PSv5+
中,写入主机现在写入到,其输出可以被捕获,但只能通过
6>