質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

1回答

2875閲覧

バッチファイルの秀逸な書き方

kyosanta

総合スコア15

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

1グッド

0クリップ

投稿2017/05/12 08:16

編集2017/05/15 14:08

###前提・実現したいこと
バッチファイルを用いて多重のフォルダにネストされたファイルを救出したい。
7zアプリケーションを使ってファイルを解凍した際に、誤ってフォルダを二重に作ってしまいました。
同様のファイルが100個ほどあり、流石にコマンドプロンプトやGUIではちょっと処理がしんどいので自動化する運びとなりました。

###発生している問題

多重にネストされたフォルダたちを”親ディレクトリの中の子ディレクトリ内にファイルがあれば親ディレクトリの上位ディレクトリに移動する”という操作を各フォルダの名前の違いを意識せず、各フォルダに実行したい。が、その書き方がわからない。

###該当のソースコード

@echo off pushd D: pushd D:\Documents\Files set file1 =DIR D:\Documents\Files\File.01\File.01.text /a:-d if %%file1 = 1 do( cd /.. )

※この"file1"の部分を変数かなにかでフォルダの数だけ実行したい。
###試したこと
各フォルダごとにif構文で中身の有無の確認まではコーディングできましたがその後中身のファイルの名前がちがうので、個別にcdコマンドを使わねばなりません。
そこで、フォルダが空でなければ中身をcd /.. するという表現をどうコード化すればよいでしょうか。
もしかして、拡張子が同じならそこから探す方法もあるのでしょうか。

よろしくお願い致します。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
以下問題ファイルのツリーです。
File
|-File01-file01-file01.pdf
|-File02-file02-file02.pdf
|-File03-file03-file03.pdf
...以下同様のフォルダが100個ほど。

File
|-File01-file01
|-File02-file02
|-File03-file03
|-file01.pdf
|-file02.pdf
|-file03.pdf
したいと考えています。

問題は大文字のフォルダはアプリの設定で作成されたもので、解凍したいファイルはもともとフォルダで小分けされていたのです。そこで、もうフォルダは必要ないので一番上層のFileフォルダにpdfのみを移動したいということです。
このような感じでいかがでしょうか。
初心者ゆえ、多くの概念がまだ理解不足なのに加えて説明能力不足も相まって非常に難解な文章となってしまいました。お手数おかけしますがよろしくお願い致します。

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matobaa

2017/05/12 08:50

すみません、やりたいことがよくわからないです。どういう状態のフォルダツリーを、どういう状態にしたいのか、を記載してください。「親ディレクトリの中の子ディレクトリ内にファイルがあれば親ディレクトリの上位ディレクトリに移動する」という文章からだと、「C:\上位\親\子\ファイル.txt」 を 「C:\上位\ファイル.txt」 に移動したい、というように読めましたが、認識あってますか。
matobaa

2017/05/12 08:52

階層が違うところにファイルがあるときはどうしましょうか。「C:\上位\もう一段\親\子\ファイル.txt」があったら「C:\上位\もう一段\ファイル.txt」に移動したい、というように読めましたが、認識あってますか。
matobaa

2017/05/12 08:53

フォルダなしで展開しなおす、という方法でもよいのでしょうか。
otn

2017/05/12 14:00

ちょっと何を言ってるのかわからないので、フォルダ構成の現状と、希望の状態を書いてください。
kyosanta

2017/05/15 14:17

返信が遅れて申し訳ありません。 matobaa さんの認識で間違いありません。解凍後のファイルがすでにフォルダ分けされているとはつゆ知らず、アプリをフォルダ付きで解凍するように設定したため上記の問題が発生したので、幸いすべてファイルの階層は同じです。
guest

回答1

0

ベストアンサー

役に立たないかもしれませんが、POSIXシェル芸での解決方法を書いておきます。もしBash on windowsやpowershellをご利用ならば使えるかもしれません。

shell

1mv $( find . | grep "*.pdf" ) ./

簡単に説明をすると、find .で現在のフォルダから下にあるすべてのファイルを表示、grep "*.pdf"でその中からファイル名が***.pdf**のものだけを取り出し、最後にmvでそれらを全部現在のフォルダに移動してます。

投稿2017/05/15 14:20

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kyosanta

2017/05/15 14:50

 ありがとうございます。最近、時代の趨勢を鑑みてそろそろコマンドプロンプトよりpowershellではないかと思いたち、bash on...を導入しました。  どちらも初心者なので、どちらを勉強するか悩んでいましたがしばらく様子をみて決めたいと思います。ありがとうございました。
退会済みユーザー

退会済みユーザー

2017/05/16 14:20

頑張ってください! b
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問