2017-10-11 137 views
0

我试图从目录中复制文件与它的所有子目录和文件。正如我已经发现的那样,这可以通过robocopy轻松完成。错误的Powershell robocopy重命名文件

robocopy $source $dest $arg $logfile_temp 

我的问题是,有在源目录包含在他们的名字":",因为他们位于一个Linux服务器的一些文件(主要是巴纽 - 文件)(含时间戳)。

现在,我想所有的文件ROBOCOPY到另一个目录,并每次出现错误,因为名称":"的,应将文件复制到一个临时地点,改名(":" - >".")然后将其复制到目的地目录(因此,原始文件基本保持不变)。

我将是真棒,如果有人能够回答这个问题:)

+0

所以我会做的是先解决你的问题槽powershell然后做你的文件的robocopy。所以我会使用powershell重命名包含“:”的文件,然后将它们复制到他们的新位置。你想要做的是让事情变得比他们需要的更努力。 – Snak3d0c

+0

但不应更改原始文件。我将不得不创建每个文件的副本并重命名该文件。但我怎么能够保持原有的道路呢?因为复制的文件需要与源目录中的路径相同? –

+0

问题是,Windows系统不允许\ /:*?“<> |在它的文件名中,所以你不能先复制它,然后重命名它,它不会允许你这样做(就我而言至少知道) – Snak3d0c

回答

0

这是你如何将在路径重命名文件,他们正坐在:

gci 'C:\temp\stack' | Rename-Item -NewName {$_.Name -replace ':','.' } -whatIf 

-whatIf参数会照如果。如果您删除它,它将执行文件的实际重命名。

+0

谢谢!我之前可以重命名文件,但无法遍历所有文件并保留原始目录。 –

+0

将其标记为已回答 – Snak3d0c

0

我最后的剧本是这样的: 首先,我初始化一些变量:

$source = "..." 
$temp = "..." 
$dest = "..." 
$arg = "..." 
$logfile_temp = "..." 
$logfile_dest = "..." 

然后我的所有文件复制到一个临时目录:

robocopy $source $temp /e /Log+:$temp\copyLog.txt 

在那之后,我遍历所有我的Temp-Directory中的文件并搜索其名称中带有“:”的文件:

Get-ChildItem -recurse | where {! $_.PSIsContainer} | 
    Rename-Item -NewName {$_.name -replace '#','.'} 

最后,我可以将这些文件/目录复制到我的目的地目录中。

robocopy $temp $dest /e /Log+:$dest\copyLog.txt 

另外,我将进程的输出记录到“copyLog.txt”中。