dポイントプレゼントキャンペーン実施中!

http://oshiete1.goo.ne.jp/qa5042945.html
以前上記の質問をした者です。

以下のようなファイルの構造がある際に
処理前の図の状態から処理後の図のように
自動的に処理をさせる事はできないでしょうか?

───┐
処理前└────────────────────

CurrentDirectory

├ Folder1
│ └ File.***

├ Folder2
│ │
│ ├ Folder2-1
│ │ └ File.***
│ │
│ └ Folder2-2
│   └ Folder2-2-1
│     └ File.***

├ Folder3
│ └ Folder3-1
│   └ File.***

├ Folder4
│ └ Folder4-1
│   │
│   ├ Folder4-1-1
│   │ └ File.***
│   │
│   └ Folder4-1-2
│     └ Folder4-1-2-1
│       └ File.***

└ Folder5 (下2つのフォルダの名前が同じ)
  └ Folder5
    └ Folder5
      └ File.***
───┐
処理後└────────────────────

CurrentDirectory

├ Folder1
│ └ File.***

├ Folder2
│ │
│ ├ Folder2-1
│ │ └ File.***
│ │
│ └ Folder2-2
│   └ Folder2-2-1
│     └ File.***

├ Folder3
│ └ File.***

├ Folder4
│ │
│ ├ Folder4-1-1
│ │ └ File.***
│ │
│ └ Folder4-1-2
│   └ Folder4-1-2-1
│     └ File.***

└ Folder5
  └ Folder5
    └ File.***

────────────────────────

お分かりになる方ご教授いただけたら幸いです、
ご回答お待ちしております、よろしくお願いいたします。

A 回答 (6件)

おはようございます。



>>このルールはカレントディレクトリ直下のフォルダに対して適用するのですか?
>>上記の例でいうと、Folder2-2-1やFolder4-1-2-1などは削除の対象にならないのですか?
>おっしゃる通りで今回の場合はFolder2-2-1やFolder4-1-2-1などのフォルダは削除対象にはなりません。

カレントディレクトリ配下のフォルダに対して、中に1つのフォルダのみ存在しファイルも無い場合に、そのフォルダを1階層あげるという事ですね。
ざっとバッチファイルで作ってみました。

:--------------------------------------------------- sample.bat
echo off
for /D %%d in (*) do call :sub "%%d"

tree /f
exit /b

:sub
pushd %1
for /f "delims=" %%i in ('dir /a:-d /b 2^>NUL^|find /v /c ""') do set filec=%%i
for /f "delims=" %%i in ('dir /a:d /b 2^>NUL^|find /v /c ""') do set dirc=%%i
if not "%filec%"=="0" goto end
if not "%dirc%"=="1" goto end

for /f "delims=" %%i in ('dir /a:d /b') do set dirname="%%i"
move %dirname% ..\$tmp$
popd
rd %1
ren $tmp$ %1
goto :EOF

:end
popd
goto :EOF

ざっくり作ってみましたので、希望される動作と違うようでしたらご指摘下さい。Windows XP で動作確認しました。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
バッチファイルという未知の物で戸惑いましたが各自検索しなんとか上手くいきました。

一応、今回私が行った方法を書きますと、

:--------------------------------------------------- sample.bat
から、最後の
goto :EOF
までの行をコピーしテキストエディタに貼り付けてsample.batという名前で保存しカレント内で実行しました。

上記の方法でsample.batを作成し、例でいうCurrentDirectory内にsample.batを置いて実行したところ、
見事に処理前から処理後の形になるようにファイルおよびフォルダの移動が行われました。

一応正しく動作したので恐らく手順は間違ってないとは思うのですが…、これでいいんですよね?


>ざっくり作ってみましたので、希望される動作と違うようでしたらご指摘下さい。Windows XP で動作確認しました。
とりあえず例と同じ構造を作成して試したところ問題はありませんでした。
構造を複雑にしたりファイルフォルダ名を長くしたりもしてみましたが問題ありませんでした。
恐らく大丈夫かと思います、本当にありがとうございました。

しかしコマンドプロンプトでこんな事ができたんですね、正直圧巻です。
実行と共に黒い画面が現れ自動処理、なんだか感動してしまいました。
ただ少々怖いですね、実行と共に有無を言わさず処理が始まるので、細心の注意を払った方がよさそうです。
今回の事で自分の無知を痛感しました。

お忙しいなか時間を割いていただき本当に感謝です。
どうもありがとうございました。

お礼日時:2009/07/04 17:16

おはようございます。


バッチの動作のさせ方については、ご存じかと思って省略しましたが、

> 一応、今回私が行った方法を書きますと、
>
> :--------------------------------------------------- sample.bat
> から、最後の
> goto :EOF
> までの行をコピーしテキストエディタに貼り付けてsample.batという名前で保存しカレント内で実行しました。
>
> 上記の方法でsample.batを作成し、例でいうCurrentDirectory内にsample.batを置いて実行したところ、
> 見事に処理前から処理後の形になるようにファイルおよびフォルダの移動が行われました。
>
> 一応正しく動作したので恐らく手順は間違ってないとは思うのですが…、これでいいんですよね?

これでOKです。ちゃんと、動作させたい場所(CurrentDirectory内)にバッチを置かれて実行されているので問題ありません。

> しかしコマンドプロンプトでこんな事ができたんですね、正直圧巻です。
> 実行と共に黒い画面が現れ自動処理、なんだか感動してしまいました。
> ただ少々怖いですね、実行と共に有無を言わさず処理が始まるので、細心の注意を払った方がよさそうです。

バッチファイルはコマンドの組み合わせで結構凝ったことも出来ます(当然やりたいことを実現するコマンドは必要ですが)。
今回のバッチの場合ですと実行する場所を間違えると厄介なことになるので、おっしゃるとおり注意を払って実行されるのはいいことだと思います。

ともかく、希望されていた動作と合っていてよかったです。
    • good
    • 0
この回答へのお礼

こんばんは。

>これでOKです。ちゃんと、動作させたい場所(CurrentDirectory内)にバッチを置かれて実行されているので問題ありません。
すみませんわざわざ、間違ってないという事を聞いて安心しました。

>バッチファイルはコマンドの組み合わせで結構凝ったことも出来ます(当然やりたいことを実現するコマンドは必要ですが)。
>今回のバッチの場合ですと実行する場所を間違えると厄介なことになるので、おっしゃるとおり注意を払って実行されるのはいいことだと思います。
確かに今回体験した事からも様々な事ができるんだろうなと感じました。
こういった物を自分で作れるようになりたいものです。

>ともかく、希望されていた動作と合っていてよかったです。
この度は大変お世話になりました、
わずらわしい作業がぐっと短縮されそうです。

お礼日時:2009/07/05 17:31

こんにちは。


> Folder3 Folder4 の例のように、サブフォルダ(Folder3)の中にフォルダ(Folder3-1)が一つだけある、
> といった構造があった際にそのフォルダ(Folder3-1)の中のファイルおよびフォルダは一つ上の階層へ移動し、
> 空になったフォルダ(Folder3-1)を削除したいと考えていました。
このルールはカレントディレクトリ直下のフォルダに対して適用するのですか?
上記の例でいうと、Folder2-2-1やFolder4-1-2-1などは削除の対象にならないのですか?
    • good
    • 0
この回答へのお礼

再びありがとうございます。

>このルールはカレントディレクトリ直下のフォルダに対して適用するのですか?
>上記の例でいうと、Folder2-2-1やFolder4-1-2-1などは削除の対象にならないのですか?
おっしゃる通りで今回の場合はFolder2-2-1やFolder4-1-2-1などのフォルダは削除対象にはなりません。

今回の処理は主にフリーソフトやスキンなどを落とした際に使おうかと考えているのですが、
カレント直下以外の構造が乱れると上手く認識しない恐れがありますので
今回はFolder2-2-1やFolder4-1-2-1などは削除しない方針でお願いいただけたらと思います。

何度もお手間を取らせてしまいすみません。

お礼日時:2009/07/01 14:06

自動処理させるためには処理全体に共通なルールを決めないといけません。


Folder5の部分の「下2つのフォルダの名前が同じで、上の階層に同一名のフォルダのみ存在する場合、階層を一つ削除する」というのはルールとしてわかるのですが、

Folder3の部分でFolder3-1が無くなっているのはどのようなルールでしょうか。
同様にFolder4の部分でFolder4-1が無くなっているのもルールを文章で表せますか?

このあたりをどのように考えているかが伝わらないと、自動化する処理は作れません。逆に言うと、ルールが明確になれば自動化できると言うことです。
    • good
    • 0
この回答へのお礼

>Folder3の部分でFolder3-1が無くなっているのはどのようなルールでしょうか。
>同様にFolder4の部分でFolder4-1が無くなっているのもルールを文章で表せますか?
今回の場合、名前はどうでもよかったんです。
Folder3 Folder4 の例のように、サブフォルダ(Folder3)の中にフォルダ(Folder3-1)が一つだけある、
といった構造があった際にそのフォルダ(Folder3-1)の中のファイルおよびフォルダは一つ上の階層へ移動し、
空になったフォルダ(Folder3-1)を削除したいと考えていました。

Folder5の例については、その一つ上の階層へフォルダを移動する際に
名前で引っかかってしまうかもしれない事を考えて一応書きました。
Folder5のような構造の場合、2回処理を実行する事でFolder1の処理後と同様の構造になるはずです。


ちなみに処理後の例の状態に対しもう一度処理を実行すると以下のような形になるかと思います。

CurrentDirectory

├ Folder1
│ └ File.***

├ Folder2
│ │
│ ├ Folder2-1
│ │ └ File.***
│ │
│ └ Folder2-2
│   └ Folder2-2-1
│     └ File.***

├ Folder3
│ └ File.***

├ Folder4
│ │
│ ├ Folder4-1-1
│ │ └ File.***
│ │
│ └ Folder4-1-2
│   └ Folder4-1-2-1
│     └ File.***

└ Folder5
  └ File.***

このルールに従えば恐らくご覧のようにFolder5にのみに処理が行われるのではないかと考えています。

しかし回答者様がおっしゃったようなFolder5のように「名前が同一の場合のみ移動を行う」という物もあれば便利な気がしますね。
大変お手数ですがご存知であればこちらの方法もお答えいただけたら非常に助かるのですが…。


前回の質問(qa5042945.html)とは微妙に内容が異なるのでURLは載せない方がよかったのかもしれませんね。
申し訳ありませんでした。

お礼日時:2009/06/30 01:26

自動的に処理をさせる事はできないでしょうか?



出来ます。

方法は、
目的に合ったソフトを作成する。
自分で出来ないならば、ソフト会社に注文する。
自分で作成できるように勉強する。

前の質問の場合。
圧縮・解凍ソフトの目的が、
圧縮時のファイル構造を、忠実に解凍・再現する。
なので、解凍時にファイル構造を変更するような機能は有りません。
もし、有ったとして、選択肢が増えますから、大多数の利用者に不便をかけることになります。
ソフトの開発者としては、そんな機能は付けないでしょうね。
「圧縮時のファイル構造を、忠実に解凍・再現する。」のが目的なので、
希望のファイル構造に、したいのならば、
圧縮時に、すればよいことでしょう。
自分で圧縮していないのならば、依頼する。

天下のマイクロソフトとでさえ、あまり利用のない機能は、
(便利に利用している人がいても)削除してしまうのですからね。
    • good
    • 0
この回答へのお礼

>方法は、
>目的に合ったソフトを作成する。
>自分で出来ないならば、ソフト会社に注文する。
>自分で作成できるように勉強する。
具体的な解決策ではありませんが確かに業者などに頼めばやってくれるでしょうね。
自分で作成する、については以前それとなく調べた事があるのですが何がなにやらよくわかりませんでした。
素人がプログラミングなどを行うにあたって参考になる資料かなにかご存知ありませんか?

>なので、解凍時にファイル構造を変更するような機能は有りません。
前回の質問での望ましい処理はファイル構造を変更するような内容ではありません。
解凍時にむやみやたらにサブフォルダを作成せずに書庫直下に複数のファイルおよびフォルダが存在する場合か、
もしくは書庫名と書庫直下のフォルダの名前が異なる場合に、
書庫と同様の名前のサブフォルダを作成しそこへ解凍する、といった処理を行ってほしかったのです。

>希望のファイル構造に、したいのならば、
>圧縮時に、すればよいことでしょう。
>自分で圧縮していないのならば、依頼する。
自分で圧縮を行うならルールを定め統一すればよいのですが、
ネット上で無数に落ちているファイルに対してそれを望むのは不可能です。
要は私は書庫一つ一つに対して手作業でリネームや移動作業を行いたくないんです。

どうもありがとうございました。

お礼日時:2009/06/30 00:36

全自動ではできません。

勝手にフォルダ名が変わる事はないです。
フォルダの移動と名前の変更すればよいと思います。
移動は、フォルダの上で右クイックで切り取り、上のフォルダに移動して貼り付けします。
最後にいらないフォルダの削除をすればよいです。
名前の変更は、右クイックで名前の変更をすればよいです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>全自動ではできません。
できないのでしょうか?

>フォルダの移動と名前の変更すればよいと思います。
手作業でひとつひとつ行ってください、という事でしょうか?
定期的にこのような構造のファイルを多数扱うのでそれでは困ってしまうのですが。

>勝手にフォルダ名が変わる事はないです。
フォルダの名前は変わっていません。

お礼日時:2009/06/18 19:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!