
これは、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) }