2017-09-13 4 views
1

ターゲットパスからファイルを削除し、ソースパスからコピー先パスにコピーする配列を作成しようとしています。私は相対パスでファイルのリストを持つビルドサーバー上に.txtドキュメントを作成しました。私はそれが、フォルダB内のすべてのコンテンツを削除するのコードの下にブロックを実行し、フォルダをコピーする場合(任意のコンテンツなし)これは私がpowershellを使用して配列を調べる

$files = get-content "C:\files.txt" 
foreach ($filepath in $files) 
{ 
    $source = '\\Server1\Folder A' + $filepath 
    $dest = '\\Server2\Folder B' + $filepath 
    foreach ($removefile in $dest) 
    { 
     rd $removefile -recurse -force 
    } 
    foreach ($addfile in $source) 
    { 
     cp $addfile -destination $dest 
    } 
} 

ソーダ、

を実行しているものですB.

をフォルダへ

私はあなたの提案を試みましたが、間違ったディレクトリから/コピーを削除しようとしています。

コード:

$targetList = Get-Content "C:\MCSfiles.txt" 

foreach ($target in $targetList) { 

    $destPath = Join-Path "\\Server2\MCSWebTest" $target 
    $destFiles = Get-ChildItem $destPath 

    foreach ($file in $destFiles) { 
     Remove-Item $file -Recurse -Force 
    } 

    $sourcePath = Join-Path "\\Server1\WebSites\McsWeb2" $target 
    $sourceFiles = Get-ChildItem $sourcePath 

    foreach ($file in $sourceFiles) { 
     Copy-Item $file -Destination $destPath 
    } 
} 

エラー:

Remove-Item : Cannot find path 'C:\Program Files (x86)\Jenkins\jobs\MCSTest\workspace\App_Code' because it does not exist. At C:\Users\SVC-VI~1\AppData\Local\Temp\jenkins5893875881898738781.ps1:9 >char:1 9 + Remove-Item <<<< $file -Recurse -Force + CategoryInfo : ObjectNotFound: (C:\Program >File...kspace\App_Co de:String) [Remove-Item], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.Remov eItemCommand

Copy-Item : Cannot find path 'C:\Program Files (x86)\Jenkins\jobs\MCSTest\works pace\App_Code' because it does not exist. At C:\Users\SVC-VI~1\AppData\Local\Temp\jenkins5893875881898738781.ps1:16 >char: 18 + Copy-Item <<<< $file -Destination $destPath + CategoryInfo : ObjectNotFound: (C:\Program >File...kspace\App_Co de:String) [Copy-Item], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.CopyI temCommand

ソーダ、

どちらの提案作業の。それはまだ宛先ディレクトリ内のすべてを削除し、ファイルなしで宛先ディレクトリにソースディレクトリフォルダを追加しています。私はここで少し失われています。

+0

新しいエラーメッセージがありますか? – sodawillow

答えて

0
  1. あなたのパスにバックスラッシュが欠落している、(または多分大手のバックスラッシュがfiles.txtに含まれている)ことを避けるために、あなたの文字列を構築するためにJoin-Pathを使用

  2. あなたは$dest$sourceに繰り返すが、これらは文字列で、ファイルコレクションではなく、Get-ChildItem $destGet-ChildItem $sourceで取得する必要があります。たとえば、

はまた、読みやすくするために、あなたはスクリプトでエイリアス(rdcp

PSを使用しないでください。私はあなたのスクリプトがエラーを生成します信じて、あなたは、あなたの質問(you can edit it

EDITに関するコメントでそれらを含める必要があります。

(処理する-WhatIf年代を削除し、テストされていない)、これを試してみてください:

$targetList = Get-Content "D:\files.txt" 

foreach ($target in $targetList) { 

    $destPath = Join-Path "D:\destination" $target 
    Remove-Item $destPath -Recurse -Force -WhatIf 

    $sourcePath = Join-Path "D:\source" $target 
    Copy-Item $sourcePath -Destination $destPath -Recurse -WhatIf 

} 

EDIT2:上記のコードを修正して簡略化しましたが、私のロジックはややオフでした。

これも、単純、かつより良いグループに同じように、コピー文の前に文を削除し、それらを実行することができます:

$targetList = Get-Content "D:\files.txt" 

#remove all 
$targetList | ForEach-Object { 
    Remove-Item (Join-Path "D:\destination" $_) -Recurse -Force -WhatIf 
} 

#copy all 
$targetList | ForEach-Object { 
    Copy-Item (Join-Path "D:\source" $_) (Join-Path "D:\destination" $_) -Recurse -Force -WhatIf 
} 

両スニペットをサンプルフォルダ構造でテストされています。

完全なパスの代わりに、$fileオブジェクトを処理用コマンドレットに渡すために、最初の試みで得たエラーが原因でした。

+0

先頭のバックスラッシュはfiles.txtに含まれています。最初に起こるのは、\ Server2 \ Folder Bの下のすべてを削除してから、削除するパスが見つからないエラーをスローすることです。 は、Remove-アイテム:アイテム\\ LTR1MCS04 \ MCSWebTestを削除することはできません:それは別のプロセス は、Remove-項目で使用されているため、プロセスはファイル「\\ Server2の\フォルダB」ESS をACCできません:「パスが見つかりません\ \ Server2 \ Folder B \ bin \ filname.dll 'というファイルが存在しないため、 が存在しません。 Get-ChildItemコマンドをどこに追加するか正確にはわかりません。 – Kerry

+0

@Kerry私は私の答えを編集し、サンプルソリューションを追加しました。エラーが発生した場合は、コードまたは引用書式付きの質問にそれらを含めてください(読みやすくするため)。 – sodawillow

+0

私はすべてのあなたの助けに感謝し、私はコードとエラーを受け取った私の質問を編集しました。 – Kerry

関連する問題