• ベストアンサー
  • 困ってます

直ぐ上のフォルダーへ移動

  • 質問No.9644913
  • 閲覧数77
  • ありがとう数3
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 82% (535/652)

下記のようなフォルダー構造のファイルがあるとします。

 1) D:\ABC\XYZ\GGG
 2) D:\ABC\FGG

1)の場合
  D:ABC\GGG
2)の場合
  D:\FGG

のようターゲットフォルダー(GGG,FGG)を一つ上のフォルダーに名前を変えずに移動する
但しその場合、空になった元あった直上のフォルダー(XYZ,ABC)は削除するプログラムを教えて下さい。

バッチやスクリプトのプログラムを作成してデスクトップにショートカットのアイコンを作成し
そこにドラッグ&ドロップで処理できれば嬉しいのですが
専用のアプリなど別の解決法があればお願いします。

現在ファイル整理中でターゲットフォルダーが多数あるので
一括で処理できれれば幸いです。

質問者が選んだベストアンサー

  • 回答No.5
  • ベストアンサー

ベストアンサー率 48% (4431/9145)

@echo off
for %%A in (%*) do (
cd /d "%%~A"
for /d %%B in (*) do (
if exist "..\%%~nxB" (
if exist "..\%%~nxB_" (
if exist "..\%%~nxB__" (
echo フォルダ名が _ を2つ付けても重複 "%%~nxB"
) else (
move "%%~B" "..\%%~nxB__"
)
) else (
move "%%~B" "..\%%~nxB_"
)
) else (
move "%%~B" ..
)
)
cd ..
rd "%%~A"
)
pause
でどうですか?
ファイル名やフォルダー名に空白は入れない方が良いですよ。
お礼コメント
NuboChan

お礼率 82% (535/652)

修正されたBATファイル ありがとうございます。

サンプル数が少なく、ターゲットのファイルを全てテストしたわけではありませんが
約50個ほどテストした結果、45個は問題なく処理できました。
5個ほどエラーで処理できませんが原因は、
 多分フォルダー名の単語数が長さが長いので処理できなかったものと思われます。

 処理できなかったターゲット数が少ないので出来ないディレクトリーは手動で処理しました。

十分に機能するBATを頂き感謝致します。

最後までお付き合い願いありがとうございます。
投稿日時:2019/08/13 14:11

その他の回答 (全4件)

  • 回答No.4

ベストアンサー率 48% (4431/9145)

1) は再現しません。こちらでは上手く行きます。
パスに空白は含まれないだろうと思って、手を抜いていますが、もしかして空白が含まれますか?

2)これはフォルダー名が重複するので、無理ですね。
あらかじめname_1をリネームしておく必要があります。
補足コメント
NuboChan

お礼率 82% (535/652)

>パスに空白は含まれないだろうと思って、手を抜いていますが、もしかして空白が含まれますか?

はい。
 『S:\test\Name_1\Name 2』のように空白(半角)を含んだフォルダーが殆どです。

  『Name 2 part 2』 のように複数の空白(半角)があるフォルダーもあります。

Name 2をName_2のように空白のない場合はうまく処理できました。

>2)これはフォルダー名が重複するので、無理ですね。
>あらかじめname_1をリネームしておく必要があります。

フォルダー名が重複するも少なからずあります。
この場合、
  下位のフォルダー名を『Name 1』を『Name 1_』のように名前の最後に『_』アンダーバーを付加した
  フォルダー名に変名後に処理するようにBATを改造できませんか ?
  
  フォルダー名に空白がある場合もBAT改造に反映をお願いします。

-----------------------
ドラッグ&ドロップしたフォルダ名に「Unicode文字」が存在する場合も問題が出ますか ?
投稿日時:2019/08/13 09:20
  • 回答No.3

ベストアンサー率 48% (4431/9145)

@echo off
for %%A in (%*) do (
cd /d %%A
for /d %%B in (*) do (
if exist ..\%%~nxB (
echo フォルダー名重複 "%%~dpnxB"
) else (
move %%B ..
)
)
cd ..
rd %%A
)
pause
かな。
お礼コメント
NuboChan

お礼率 82% (535/652)

引き続き、BATの修正ファイルをいただきありがとうございます。

いただいたBATをテストしてみました。

例えばエキスプローラーで
1)『S:\test\Name_1\Name_2』で
   S:\test\Name_1をターゲットフォルダーとして
   デスクトップに作成したBATにドラッグ&ドロップしましたが

  コマンドの構文が誤っています。
  ディレクトリーが空ではありません。

とエラーが発生します。


2)『S:\test\Name_1\Name_1』では、
   S:\test\Name_1をターゲットフォルダーとして
   デスクトップに作成したBATにドラッグ&ドロップしましたが

  フォルダー名重複
  ディレクトリーが空ではありません。

とエラーが発生します。

  同じフォルダー名が上位、下位にある場合も存在するのですが
  このような場合も想定する必要が出ました。


-----------------------
『ディレクトリーが空ではありません。』は、
 移動処理がうまく処理されずにエラーになる事が原因だ思います。


エラーが出る原因を修正できますか ?
投稿日時:2019/08/13 07:58
  • 回答No.2

ベストアンサー率 42% (1525/3568)

プログラムを組むまでもなく、2つのコマンド move ,rmdirで可能です。
1) D:\ABC\XYZ\GGG
move D:\ABC\XYZ\GGG D:\ABC
rmdir D:\ABC\XYZ

2) D:\ABC\FGG
move D:\ABC\FGG D:\
rmdir D:\ABC
補足コメント
NuboChan

お礼率 82% (535/652)

ありがとうございます。

現在ファイル整理中でターゲットフォルダーが多数あるので
コマンドをOne_By_Oneで処理していては手数が掛かって効率が悪くなります。
投稿日時:2019/08/12 11:01
  • 回答No.1

ベストアンサー率 48% (4431/9145)

バッチファイルでドラッグドロップしてください。

@echo off
for %%A in (%*) do (
if exist "%%~dpA..\%%~nxA" (
echo フォルダー名重複 "%%~A"
) else (
move %%A "%%~dpA.."
)
)
pause
お礼コメント
NuboChan

お礼率 82% (535/652)

ありがとうございます。

検証して確かに移動できることを確認しました。

少し思っていた作動とは違ったのでBATを修正いただけると嬉しいです。

条件は下記で最初と同じとして

 1) D:\ABC\XYZ\GGG
 2) D:\ABC\FGG

1)の場合で現在のBATでは、
  GGGをターゲットでドラッグドロップしないと移動できません。
  XYZをターゲットでドラッグドロップしてGGGを移動したいのです。

  現在のBATで、XYZをターゲットにすると
   ABCにXYZ\GGGが移動してしまいます。

2)の場合も同様に現在のBATでは、
  FGGではなくABCをドラッグドロップしてFGGを移動したいのです。

  現在のBATでABCターゲットにすると
   D:にGGGが移動してしまいます。

また、移動後のフォルダーは空になるので削除したいので削除処理も追加したいです。
投稿日時:2019/08/12 10:57
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ