目录路径中的通配符,用于使用 powershell 将文件从源传输到目标

wildcards in directory path for transferring the files from source to destination using powershell

我必须使用 PUTTY 从目录“/sourcedir/Test/TRANS*/transferfiles.csv”中的 SFTP 帐户获取文件,并将它们传输到我的本地目标目录。在目录路径中使用通配符“TRANS*”时遇到问题。我如何在目录路径中使用多个通配符?我收到错误 "/sourcedir/Test/TRANS*/*transferfiles*.csv": multiple-level wildcards unsupported."。 TIA

[string]$TransferResults = & 'C:\Program Files\PuTTY\pscp.exe' -l 'username' -pw 'password' "username@$(IPaddress):/sourcedir/Test/TRANS*/*transferfiles*.csv" $Destination

我尝试了@Cpt.Whale建议的解决方案。 输出:

Listing directory /sourcedir/Test/                                                                                 drwxr--r--   1        -        -        0 Apr 28 14:43 TRANS_whiteplain         drwxr--r--   1        -        -        0 Apr 28 14:43 TRANS_test_1

要在 foreach 循环中解析的代码片段。

 foreach($file in $parsedfolders){
    [string]$fpath = $file.fullName
    [string]$TransferResults = & 'C:\Program Files\PuTTY\pscp.exe' -l 'username' -pw 'password' "username@$(IPaddress):$fpath/*transferfiles*.csv" 
$Destination

我收到错误:无法识别/传输文件.csv:没有这样的文件或目录

根据您的评论,我假设 pscp -ls 的输出如下所示:

Listing directory /sourcedir/Test/                                                                                 
drwxr--r--   1        -        -        0 Apr 28 14:43 TRANS_whiteplain         
drwxr--r--   1        -        -        0 Apr 28 14:43 TRANS_test_1
drwxr--r--   1        -        -        0 Apr 28 14:43 TRANS test spaces

从该输出中,我们可以使用正则表达式获取文件夹名称:

# First, list the folder names in the upper level folder
$folders = & 'C:\Program Files\PuTTY\pscp.exe' -l 'username' -pw 'password' -ls "username@10.0.0.1:/sourcedir/Test/"

# only lines starting with d, select everything after time "0:00"
$pattern = '^d.+\d:\d{2} (.*)' 

# parse output into folder names using regex
$parsedFolders = foreach ($folder in $folders) {
  # trim whitespace
  [regex]::Match($folder,$pattern).Groups[1].Value.trim() |
    # discard empty results
    Where { -not [string]::IsNullOrWhiteSpace($_) }
}

现在解析后的文件夹应该可以使用了:

$parsedFolders

TRANS_whiteplain
TRANS_test_1
TRANS test spaces

所以尝试为每个文件夹制作副本:

# Finally, copy files from each parsed folder to destination
$results = foreach ($parsedFolder in $parsedFolders) {
  & 'C:\Program Files\PuTTY\pscp.exe' -l 'username' -pw 'password' "username@10.0.0.1:/sourcedir/Test/$parsedfolder/*transferfiles*.csv" $Destination 
}