フォルダの内容を親フォルダに移動する

フォルダの内容を親フォルダに移動する

これは、Windows 7 マシンの現在のフォルダー構造です。

---myfoolder
   |    
   +---nope              
   |   \---nope          
   |           nope.txt  
   |                     
   +---wtf               
   |   \---wtf           
   |           wtf.txt   
   |                     
   +---yep               
   |   \---yep           
   |           yep.txt   
   |                     
   \---zomg              
       \---zomg          
               zomg.txt  

この構造では、 のように各レイヤーに重複したフォルダーが存在しますnope\nope

この重複を排除するために、各フォルダー内の各ファイルを 1 レベル上に移動したいと思います (わかりやすくするために、各ディレクトリに 1 つのファイルをリストしましたが、拡張子が異なる複数のファイルが存在する可能性があることに注意してください)。

これは私がPowerShellで試したことですこの回答から:

gci -R | ?{!$_.PSIsContainer} | %{mv $_.fullname $_.directory.parent}

残念ながら、次のエラーが発生します:

mv : Cannot create a file when that file already exists.
At line:1 char:35
+ gci -R | ?{!$_.PSIsContainer} | %{mv $_.fullname $_.directory.parent}

親フォルダーと子フォルダーの間に重複した名前があるため、何か怪しいことが起こっていると思います。-Forceステートメントにも指定してみましたmvが、実際にはファイルが削除され、フォルダーはそのまま残りました (幸い、これを行う前にテスト環境を設定していました)。

何が足りないのでしょうか? 残念ながら、私は PS スクリプトの初心者です。ありがとうございます。

答え1

Move-Itemパスを文字列として受け取り、.directory.parent文字列にキャストすると、空の文字列か 1 つのディレクトリ名だけになり、親フォルダーへの完全なパスではないようです。

試す:

$_.directory.parent.FullName

または

|%{ mv $_.FullName (Split-Path -Parent $_.Directory) }

関連情報