RoboCopy 源

SQL*_*SER 3 powershell robocopy

我正在使用 robocopy 编写一个 powershell 脚本,以从列表中复制“完整”unc/文件名路径。我遇到的问题是 robocopy 似乎\在我的源路径末尾添加了 a 。

我有一个 C:\temp\list.txt,其中列出了带有文件名的 UNC 路径示例:\server\folder\test.txt

我的代码

$Paths = Get-Content -Path C:\Temp\List.txt
ForEach ($p in $Paths) {robocopy $p "\\Server\path\path\"}

The error that powershell is throwing is : 

   -------------------------------------------------------------------------------
  ROBOCOPY     ::     Robust File Copy for Windows                              
  -------------------------------------------------------------------------------

   Started : Monday, March 1, 2021 1:36:52 PM
   Source : \\Server\path\path\test.xls\
   Dest : \\Server\path\path\
  

Files : *.*
    
Options : *.* /DCOPY:DA /COPY:DAT /R:1000000 /W:30 

------------------------------------------------------------------------------

2021/03/01 13:36:52 ERROR 267 (0x0000010B) Accessing Source Directory 
\\Server\path\path\test.xls\
The directory name is invalid.
Run Code Online (Sandbox Code Playgroud)

有谁知道如何阻止 robocopy 在\我的“源”位置末尾添加 ?

感谢您的帮助。

Ste*_*ven 5

我不确定“\”是你的问题。您使用的 Robocopy 命令格式不正确。指定源和目标后,应将文件指定为过滤器。

RoboCopy <SourceFolderPath> <DestinationFolderPath> <File1> <File2> ...
Run Code Online (Sandbox Code Playgroud)

因此,您必须重新设计循环,将文件名从输入中剥离出来,并正确连接 Robocopy 命令,可能类似于:

$Paths = Get-Content -Path C:\Temp\List.txt
ForEach ($p in $Paths)
{    
    $Path = Split-Path -Path $p -Parent
    $File = Split-Path -Path $p -Leaf
    robocopy $Path "\\Server\path\path\" $File
}
Run Code Online (Sandbox Code Playgroud)

Robocopy.exe /?

  Started : Monday, March 1, 2021 2:06:53 PM
              Usage :: ROBOCOPY source destination [file [file]...] [options]

             source :: Source Directory (drive:\path or \\server\share\path).
        destination :: Destination Dir  (drive:\path or \\server\share\path).
               file :: File(s) to copy  (names/wildcards: default is "*.*").
Run Code Online (Sandbox Code Playgroud)

过滤器不必是精确的文件名,它们可以利用通配符来*.xls帮助选择文件。我认为在你的情况下,你在某种程度上受到输入格式的限制。

$Paths = Get-Content -Path C:\Temp\List.txt
ForEach ($p in $Paths)
{    
    $Path = Split-Path -Path $p -Parent
    $File = Split-Path -Path $p -Leaf
    robocopy $Path "\\Server\path\path\"
}
Run Code Online (Sandbox Code Playgroud)

如果你想复制子文件夹及其文件,有 3 个选项,再次引用帮助文件:

/S :: copy Subdirectories, but not empty ones.
/E :: copy subdirectories, including Empty ones.
/MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).
Run Code Online (Sandbox Code Playgroud)

警告: /MIR可能很危险,因为它可以很快删除目标中的内容。

即使您遍历子文件夹,过滤器也会应用。因此,请务必调整或删除它。如果您想复制选定文件夹中的所有内容,只需删除过滤器即可,尽管从技术上讲,星号也可以。

我建议认真研究帮助文件。有不同的文件选择和复制选项值得了解。