有没有办法递归到最后一个目录级别?
我试图执行以下脚本:
$sourcepath = "\\xx.xxx.xx.xxx\target";
$inputdate = '2014-06-02';
$sourcepath
#Get-ChildItem -path $sourcepath
Get-Date;
Get-ChildItem -path $sourcepath -recurse | where-object {$_.fullname.contains("XX") -and $_.fullname.contains($inputdate)} |
foreach-object {
$_.fullname;
}
Get-Date;
上面的源目录\ xx.xxx.xx.xx \ ftpcopy有很多文件夹,如XX,X1,X2等。在每个子文件夹中都有像' 2014-06这样的文件夹-01',' 2014-06-02'等
在每个子文件夹中都有文件。这些子文件夹总共有68个,所有子文件夹都包含文件。我的目标是使用脚本只列出文件夹中文件的名称,\ xx.xxx.xx.xxx \ ftpcopy \ XX \ 2014-06-02。
稍后我想概括一下,以便列出文件夹' 2014-06-02'在任何子文件夹' XX',' X1',' X2'等等,当我传递参数' sourcepath'和'输入日期'。
执行此脚本时,需要45分钟才能执行,这很长。我认为这是由于每个子文件夹中的许多文件;它必须通过所有这些来解决匹配模式。
如果有办法只递归到最后一个文件夹级别,例如' 2014-06-02'然后它可以使脚本运行得更快。 xx.xxx.xx.xxx是我尝试访问的远程服务器。我怎么能这样做?
答案 0 :(得分:0)
我最初的想法是尝试获取仅文件夹列表,并且可能过滤$ inputdate(我不信任文件系统提供程序的过滤功能,所以我会过滤后),然后可能只是在这些文件夹上运行GCI
所以,有些东西:
$sourcepath = "\\xx.xxx.xx.xxx\ftpcopy"
$inputdate = '2014-06-02'
get-childitem -path $sourcepath -recurse -directory|?{$_.Name -match $inputdate -and $_.fullname.contains("XX")}| %{ GCI $_.fullname }
如果这是你希望能够提供XX的日期,也许某个日期可能更适合你。
Function Get-FTPFiles{
Param(
$InputDate = (Get-Date).ToString('yyyy-MM-dd'),
$sourcepath = "\\xx.xxx.xx.xxx\ftpcopy",
$XX = '.'
)
get-childitem -path $sourcepath -recurse -directory|?{$_.Name -match $inputdate -and $_.fullname -match "$XX"}| %{ GCI $_.fullname }
}
然后你可以不用参数调用它来获取当前日期的任何文件夹中的所有文件,或者指定日期,XX文件夹和/或服务器路径。
Get-FTPFolders
或
Get-FTPFolders -InputDate "2014-06-24" -XX "X3"
答案 1 :(得分:0)
我交易这个:
get-childitem -path $sourcepath -recurse -directory|?{$_.Name -match $inputdate -and $_.fullname.contains("XX")}| %{ GCI $_.fullname }
代表
(cmd /c dir $sourcepath /b /s /ad) -match $inputdate -match '\\xx\\' | GCI
编辑: