尽管输入了正确的路径,但无法传输多个文件

如何解决尽管输入了正确的路径,但无法传输多个文件

虽然输入了正确的路径,但无法传输多个文件

######Transfer file
Write-Host ("Start script.")
try
{
    $todaysDate = (Get-Date).ToString('yyyy-MM-dd')
    Add-Type -Path "D:\WinSCP\WinSCPnet.dll"
 
    # Setup session options
    $session = New-Object WinSCP.Session
    $sessionOptions = New-Object WinSCP.SessionOptions
    $sessionOptions.Protocol = [WinSCP.Protocol]::Sftp
    $SessionOptions.Timeout = New-TimeSpan -Seconds 90
    $sessionOptions.HostName = "hostname"
    $sessionOptions.UserName = "username"
    $sessionOptions.PortNumber = "portnumber"
    $sessionOptions.Password = ""
    $sessionOptions.SshPrivateKeyPath = "D:\privatekey" 
    $sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxx"
    
    #Write-Host ("Connecting.")    
    $session = New-Object WinSCP.Session
    $session.SessionLogPath = "D:\WinSCPSessionLog_$todaysDate.log"
 
   #Upload files
    try
    {
      # Connect
      $session.Open($sessionOptions)
      
      #File list:
      Write-Host ("File list: ")
      
      #transferoptions
      $transferOptions = New-Object WinSCP.TransferOptions
      #$transferOptions.FileMask = "*.*"
      $transferOptions.FilePermissions = $Null # This is default
      $transferOptions.PreserveTimestamp = $False # if Timestamp on file is enable      
      
      $localPath = Get-ChildItem "D:\dq\*.csv" | Where-Object {($_.LastWriteTime -ge [datetime]::today)}
      $remotePath = "/Outbox/"
      
      # Upload files,collect results
      $transferResult = $session.PutFiles($localPath,$remotePath,$False,$transferOptions)
        
      # Upload files,collect results
      #$transferResult = $session.PutFiles(($localPath + "*.*"),($remotePath,+ "*.*") $False,$transferOptions).Check()
        
      # Iterate over every transfer
      foreach ($transfer in $transferResult.Transfers)
      {
         # Success or error?
         if ($transfer.Error -eq $Null)
         {
            #$transferResult = $session.PutFiles($localPath,$transferOptions).Check()
            Write-Host ("Upload of {0} succeeded,moving to save" -f $transfer.FileName)    
         }
         else
         {
            Write-Host ("Upload of {0} failed: {1}" -f $transfer.FileName,$transfer.Error.Message)
         }
      }
      #End of files:
      Write-Host ("End of files. ")      
    }
    finally
    {
      # Disconnect,clean up
      $session.Dispose()
      Write-Host ("Disconnected.")      
    }
 
    #exit 0
}
catch [Exception]
{
    $todaysDate = (Get-Date).ToString('yyyy-MM-dd')
    Set-Content -Path "D:\WinSCPError_$todaysDate.log" $_.Exception.Message
    #exit 1
}

日志文件:

文件列表: 上传 D:\dq\ADD.csv D:\dq\MINUS.csv D:\dq\DIVIDE.csv 失败:文件或文件夹 'D:\dq\ADD.csv D:\dq\MINUS.csv D: \dq\DIVIDE.csv' 不存在。 系统错误。代码:123。 文件名、目录名或卷标语法不正确

错误:

  1. 由于文件不存在,无法传输文件。我输入正确

工具:

  1. 使用极好的旧版本 .NET
  2. 使用极好的旧版窗口服务器

预期结果:

  1. 可以在“D:\dq*.csv”中传输多个文件,文件修改日期必须是今天的日期

解决方法

我输入正确

不,你没有。来自 localPath 参数的 WinSCP documentation

要上传的本地文件或目录的完整路径。路径中的文件名可以替换为 Windows 通配符 1 以选择多个文件。要上传目录中的所有文件,请使用掩码 *.

也就是说,它期望一条路径,而不是多条路径。

鉴于您对 LastWriteTime 的过滤要求,将 "D:\dq\*.csv" 作为参数传递不是一个可行的选择,因此解决方案是逐个上传文件:

# ...
try{
    # Connect
    $session.Open($sessionOptions)
    
    #File list:
    Write-Host ("File list: ")
    
    #transferoptions
    $transferOptions = New-Object WinSCP.TransferOptions
    #$transferOptions.FileMask = "*.*"
    $transferOptions.FilePermissions = $Null # This is default
    $transferOptions.PreserveTimestamp = $False # if Timestamp on file is enable

    # Loop through each relevant file
    foreach($localFile in Get-ChildItem "D:\dq\*.csv" | Where-Object {($_.LastWriteTime -ge [datetime]::today)}){
        $remotePath = "/Outbox/"
        # Upload files,collect results
        $transferResult = $session.PutFileToDirectory($localFile.FullName,$remotePath,$false,$transferOptions)
                
        # Success or error?
        if ($transferResult.Error -eq $Null) {
            #$transferResult = $session.PutFiles($localPath,$False,$transferOptions).Check()
            Write-Host ("Upload of {0} succeeded,moving to save" -f $transferResult.FileName)    
        }
        else {
            Write-Host ("Upload of {0} failed: {1}" -f $transferResult.FileName,$transferResult.Error.Message)
        }
    }
}
finally{
    # ...
}
,

@Martias 的回答是正确的。您不能将多个路径传递给 Session.PutFiles

但是您可以让 WinSCP 自己选择今天的 *.csv 文件,只需两行代码,使用 todays constraint

使用 Session.PutFilesToDirectory 也会使代码更简单一些。

$transferOptions = New-Object WinSCP.TransferOptions
# (your other transfer options)

$transferOptions.FileMask = ">=today"

$transferResult =
    $session.PutFilesToDirectory(
        $localPath,"*.csv",$transferOptions).Check()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res