2016-03-31 11 views
0

私は(ファイルへのフルパスを含む)XMLファイル名のリストを持っている特定のファイルの移動:.TXT文書内の特定のフォルダ

C:\Files\www_site1_com\order\placed\test45.xml 
C:\Files\www_site1_com\order\placed\test685.xml 
C:\Files\www_site2_com\order\placed\test63.xml 
C:\Files\www_site3_com\order\placed\test9965.xml 
C:\Files\www_site4_com\order\placed\test4551.xml 
etc... 

アイデアを、私はXMLファイルを移動する必要があるということです別のフォルダに、例えばので:

C:\Files\www_site1_com\order\placed\test45.xml 
    will be moved to 
C:\Files\www_site1_com\order\in\test45.xml 

C:\Files\www_site1_com\order\placed\test685.xml 
    will be moved to 
C:\Files\www_site1_com\order\in\test685.xml 

問題は、私は私が実際に入ることになっている先のフォルダに各ファイルを移動しようとして行くことができるかわからないです。

以下は、移動を処理するスクリプトの一部です。 私が先に終わるように、この第1の部分は、\で\に\置い\ XMLファイルのリストを取得し、置き換えます。

$content = Get-Content dump.txt  
ForEach ($path in $content) 
{ 
$path = $content -Split "\\t" 
$paths = $path -notlike "*t*" 
$paths = $paths -Replace ("placed","in") 
} 

私を与えるまで終了する:

C:\Files\www_site1_com\order\in 
C:\Files\www_site1_com\order\in 
C:\Files\www_site2_com\order\in 
C:\Files\www_site3_com\order\in 
C:\Files\www_site4_com\order\in 

ForEach ($path in $paths) 
{ 
Move-Item -Path $path -Destination $paths 
} 

しかし、私はエラーのすべての種類で終わる午前:

次に、私がしようとしているファイルを移動します

Move-Item : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Destination'. Specified method is not supported. 
At line:3 char:36 
+ Move-Item -Path $path -Destination $paths -WhatIf 
+         ~~~~~~ 
    + CategoryInfo   : InvalidArgument: (:) [Move-Item], ParameterBindingException 
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.MoveItemCommand 

私はいくつかのバリエーションを試してきましたが、すべてのファイルを最初の保存先フォルダに移動し、正しいフォルダには移動しませんでした。 私はこれを十分に説明してくれることを願っています!ご協力いただきありがとうございます。

答えて

0

この行:

$path = $content -Split "\\t" 

は、文字列の配列(および$パスは同様に、文字列の配列である終わる)を生成します。 -Destination引数は配列を受け付けません。また、(あなたのいずれかのディレクトリは、ATで始まる場合はどう?)非常に堅牢いないようです

代わりに分割経路を使用します。

$sourceDirectories = $content | Split-Plath -Parent 

あなたはその後、オフhivingにより、これらのディレクトリの葉を置き換えることができます親とご希望のターゲットディレクトリ追記:

$destDirectories = $sourceDirectories | Split-Path -Parent | Join-Path -ChildPath "in" 

は、あなたがそれらを移動することができますが、私は、単一のループ内ですべての操作を行います。

$content | foreach { 
    $sourceDirectory = Split-Plath $_ -Parent 
    $destDirectory = Split-Path $sourceDirectory -Parent | Join-Path -ChildPath "in" 
    Move-Item $_ $destDirectory 
} 
+0

恐ろしいzdan、アレイの情報についてのおかげで、ありがとう。私はこれを迅速なテストを与え、正確に私が必要としているようだ。どうもありがとうございます! – obs0lete

0

move-itemはフォルダを作成しないため、実際にテキストファイルの内容を編集する理由はないようです。 copy-itemを使用していた場合は、必要に応じてフォルダを作成すると、そのようなものがうまくいく可能性があります。しかし、このようなものを試してみてください:

$content = Get-Content dump.txt 

#If you want to explicitly create a particular directory 
#New-Item -Name "in" -type directory 

foreach($item in $content){ 
    $fileCheck = Test-Path $item 

    if($fileCheck){ 
     try{ 
      Move-Item -LiteralPath $item -Destination "C:\Files\www_site1_com\order\in\" -PassThru 
     } 
     catch{ 
      write-error $_ 
     } 
    } 
    else{ 
     write-warning "$item was not found" 
    } 
} 
関連する問題