用robocopy移动文件列表



我想把一些文件从一个地方移动到另一个保存目录。我的脚本的结果是编码破碎,它不工作。我使用robocoby,因为我有名字超过256个符号的文件。我需要把文件从不同的地方移走。我们说的是几百个文件。

$source = Get-Content "C:UsersbillDownloads111.TXT" -Encoding UTF8
$destination = "C:UsersbillOneDriveDocuments"
foreach($file in $source)
{
robocopy $file $destination /MOVE /E /copyall /log:C:UsersbillOneDriveDocumentslog.txt
}

简,

试着像这样构建你的robocopy命令:

***已更新和测试***

Clear-Host
$source = Get-Content "G:Test111.txt" -Encoding UTF8
$destination = "G:BEKDocsTest"
Foreach ($SrcPath in $source) {
$file     = Split-Path -Path $SrcPath -Leaf
$path     = Split-Path -Path $SrcPath -parent
$PLen     = $Path.Length -3
$PAdd     = $Path.Substring(3,$PLen)
$SavePath = Join-Path -Path $Destination -ChildPath $PAdd
$robocopyOptions = @('/Move', '/copyall')
$LogFile         = 
@('/log+:G:BEKDocsTransferlog.txt')
$CmdLine = @($path, $SavePath, $file) + 
$robocopyOptions + $LogFile
& 'robocopy.exe' $CmdLine
} #End Foreach 

注意:使用单引号表示!

更新记录:

  • 部分问题是,你有附加到你的文件路径的文件名,其中RoboCopy想要SourcePath DestPath FileSpec作为前三个参数。
  • 你正在复制单个文件,所以不需要Recurse/E参数。
  • 由于您想保留目录结构,因此需要附加源路径,而不是驱动器(d:)到目标目录。
  • 你也在循环中调用RoboForm,所以你需要/Log+参数,这样每个文件都被附加到文件中,而不是重写它。

在我的测试中,我从基本目录复制了一个文件,从一级目录复制了另一个文件,从二级目录复制了第三个文件。该代码保留了以指定的Destination作为基目录或根目录开始的目录结构。

花了一点时间来弄清楚这一切,但我不打算放手。希望这对你有用!

最新更新