こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

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

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

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

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

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

投稿日時 - 2019-08-12 08:24:27

QNo.9644913

困ってます

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

@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
でどうですか?
ファイル名やフォルダー名に空白は入れない方が良いですよ。

投稿日時 - 2019-08-13 13:45:56

お礼

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

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

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

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

最後までお付き合い願いありがとうございます。

投稿日時 - 2019-08-13 14:11:39

ANo.5

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

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

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

投稿日時 - 2019-08-13 08:42:12

補足

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

はい。
 『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:31

ANo.3

@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
かな。

投稿日時 - 2019-08-12 19:43:39

お礼

引き続き、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:16

ANo.2

プログラムを組むまでもなく、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

投稿日時 - 2019-08-12 10:44:41

補足

ありがとうございます。

現在ファイル整理中でターゲットフォルダーが多数あるので
コマンドをOne_By_Oneで処理していては手数が掛かって効率が悪くなります。

投稿日時 - 2019-08-12 11:01:07

ANo.1

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

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

投稿日時 - 2019-08-12 10:25:57

お礼

ありがとうございます。

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

少し思っていた作動とは違ったので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:46

あなたにオススメの質問