我想将源目录中存在的所有.txt文件(包括子文件夹中存在的.txt)移动到目标目录。
例如:
来源目录:D:\OFFICE work\robtest\test1
上面的目录还包含许多子文件夹。
目标目录:D:\OFFICE work\robtest\test2
我想只将源目录中的.txt文件移动到上面提到的目标目录,这样每个子文件夹(包括创建随机文件夹)中只能存在3个.txt文件。< / p>
下面是我尝试的代码,但PowerShell说
文件名,目录名或卷标语法。(D:\ OFFICE work \ robtest \ test1 \ testtest \ testtest2 \ 新文件夹\ test01112.txt \)不正确。
我不确定为什么会有额外的&#39; /&#39;在robocopy中的上述路径之后。
$fileperfolder = 3
$source = "D:\OFFICE work\robtest\test1";
$dest = "D:\OFFICE work\robtest\test2";
$folderName = [System.IO.Path]::GetRandomFileName();
$fileList = Get-ChildItem -Path $source -Filter *.txt -Recurse
Write-Host $fileList
$i = 0;
foreach ($file in $fileList) {
$destiny = $dest + "\" + $folderName
Write-Host $file.FullName;
Write-Host $destiny;
New-Item $destiny -Type Directory -Force
robocopy $file.FullName $destiny /mov
$i++;
if ($i -eq $fileperfolder) {
$folderName = [System.IO.Path]::GetRandomFileName();
$i = 0;
}
}
答案 0 :(得分:1)
您收到错误(以及&#34;目录&#34;在输出中),因为robocopy
需要两个文件夹作为第一个和第二个参数,可选后面是文件名规范列表,但您提供了文件的路径作为源。
来自documentation(强调我的):
语法
robocopy <Source> <Destination> [<File>[ ...]] [<Options>]
参数
<Source>
指定源 目录的路径 。<Destination>
指定目标 目录的路径 。<File>
指定要复制的文件。如果需要,您可以使用通配符(*
或?
)。如果未指定File
参数,则*.*
将用作默认值。<Options>
指定与robocopy
命令一起使用的选项。
由于您一次只移动一个文件并且显然不想维护目录结构,我说robocopy
并不是您正确使用的工具。 #39;无论如何都要做。
替换
robocopy $file.FullName $destiny /mov
与
Move-Item $file.FullName $destiny
代码应该做你想做的事。
答案 1 :(得分:0)
robocopy $ file.Directory $ destiny $ file / mov
解决了这个问题。