根据文本文件将多个文件复制到多个目标

时间:2015-12-29 02:01:04

标签: powershell powershell-v3.0

我想通过创建目录将文本文件中指定的文件列表复制到目标列表。我有一个Excel文件,其中有2列,源和目标,每个源都有一个目标。

示例来源:

In [1]: import requests

In [2]: url = 'http://www.hrecos.org//images/Data/forweb/HRTVBSH.Metadata.pdf'

In [3]: response = requests.get(url)

In [4]: with open('/tmp/metadata.pdf', 'wb') as f:
   ...:     f.write(response.text)
---------------------------------------------------------------------------
UnicodeEncodeError                        Traceback (most recent call last)
<ipython-input-4-4be915a4f032> in <module>()
      1 with open('/tmp/metadata.pdf', 'wb') as f:
----> 2     f.write(response.text)
      3 

UnicodeEncodeError: 'ascii' codec can't encode characters in position 11-14: ordinal not in range(128)

In [5]: import codecs

In [6]: with codecs.open('/tmp/metadata.pdf', 'wb', encoding='utf8') as f:
   ...:     f.write(response.text)
   ...: 

示例目的地:

\\10.0.0.1\share\abd.nsf
\\20.0.0.1\share\red.nsf

目前我正在使用下面的代码,但涉及n行,因此很繁琐。

\\10.0.0.2\share\abd\
\\10.0.0.2\share\red\

2 个答案:

答案 0 :(得分:1)

$source = get-content c:\source.txt
$destination = get-content c:\destination.txt
$Count= $source.Count
$i = 0

For($i -eq 0;$i -Lt $count; $i++){
Try{new-item -itemtype directory $destination[$i]}
Catch {}
Finally{copy-item $source[$i] $destination[$i]}
}

文本文件中的源和目标应该是相同的顺序

答案 1 :(得分:1)

这是一个相当简单的问题。使您的Excel文件成为2列csv,其中列标记为Source和Destination。您不必使用那些只知道如果您的不同需要调整代码中调用的属性的人。

$path = "c:\path\to\file.csv"
$jobs = Import-CSV $path
$jobs | ForEach-Object{
    # Check if the target folder exists. If not create it.
    If(-not (Test-Path -PathType Container $_.destination)){New-item "$_.destination" -Type Container -Force}

    # If the source file exists copy it to the destination directory. 
    If(Test-Path $_.Source){Copy-Item $_.Source $_.Destination -Force}
}

创建目标目录(如果它不存在)(路径可能仍然是错误的,但它总比没有好。)。然后将该文件(假设它也存在)复制到目标。