コマンドプロンプトについて


Eドライブに aaa.jpg を E:\bbb フォルダに移動したいと考えいます。
しかし、aaa.jpg はどのフォルダにあるのか分かりません。どのフォルダにもない場合もあります。

移動させたいファイルの数がかなりあるので、
バッチで移動させたいのですが、
下記の記述ではうまくいきません。
どのように記述すればよいのか教えて下さい。

move E:\*\aaa.jpg E:\bbb

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/06/09 23:10:03
  • 終了:2007/06/10 01:26:17

ベストアンサー

id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912007/06/10 00:50:21

ポイント50pt

Kumappus さんの解釈での実現方法です。


まず収集したいファイルのリストを E:\bbb\list.txtとしておきます。

aaa.jpg
bbb.jpg
ccc.jpg

下のバッチ E:\bbb\moveFiles.bat を実行するとE:\bbb\ 下にlist.txt で記述されたファイルが集まります(同じファイル名が複数ないことが前提)。

@Echo Off
::----------------------------------------
:: 検索先フォルダ
Set SrcFolder="C:\"
::----------------------------------------
:: 格納先フォルダ
Set DstFolder="E:\bbb\"

For /F "delims=" %%f IN ( E:\list.txt ) DO Call :MoveToMyFolder "%%f"
Exit /B

::----------------------------------------
:: ファイルを探して移動
::----------------------------------------
:MoveToMyFolder
CD /D %SrcFolder%
Echo %1 を検索します。
For /F "delims=" %%f IN ('dir /S /B %1') DO (
    Echo "%%f" を移動します。
    Move "%%f" %DstFolder% )
Exit /B

できれば、検索対象先のフォルダは、移動先フォルダを含まない方が良いです。

ドライブを分けてしまった方が紛れがないですね。

DOS コマンド for


目的や条件が異なる場合は、コメントください。

id:wakutan

説明足らずですみません。

Kumappus さんの解釈で、間違いありません。

同じファイル名は複数ありませんので、問題ありません。

ありがとうございます。助かりました。

2007/06/10 01:25:42

その他の回答(1件)

id:takosan No.1

takosan回答回数222ベストアンサー獲得回数72007/06/10 00:21:41

ポイント20pt

http://q.hatena.ne.jp/1181398201

まずは試しに

E:\>for /F "delims=/" %a in ('dir *.jpg /s/b') do @echo "%a"

とやってみて下さい。

カレントディレクトリ以下のファイルの一覧が出たと思います。

目的のファイルなら次に・・

E:\>for /F "delims=/" %a in ('dir *.jpg /s/b') do move "%a" E:\bbb

などとすればOKです。

移動先が移動元と同じだとエラーになりますけど無視して良さそうです。

id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912007/06/10 00:50:21ここでベストアンサー

ポイント50pt

Kumappus さんの解釈での実現方法です。


まず収集したいファイルのリストを E:\bbb\list.txtとしておきます。

aaa.jpg
bbb.jpg
ccc.jpg

下のバッチ E:\bbb\moveFiles.bat を実行するとE:\bbb\ 下にlist.txt で記述されたファイルが集まります(同じファイル名が複数ないことが前提)。

@Echo Off
::----------------------------------------
:: 検索先フォルダ
Set SrcFolder="C:\"
::----------------------------------------
:: 格納先フォルダ
Set DstFolder="E:\bbb\"

For /F "delims=" %%f IN ( E:\list.txt ) DO Call :MoveToMyFolder "%%f"
Exit /B

::----------------------------------------
:: ファイルを探して移動
::----------------------------------------
:MoveToMyFolder
CD /D %SrcFolder%
Echo %1 を検索します。
For /F "delims=" %%f IN ('dir /S /B %1') DO (
    Echo "%%f" を移動します。
    Move "%%f" %DstFolder% )
Exit /B

できれば、検索対象先のフォルダは、移動先フォルダを含まない方が良いです。

ドライブを分けてしまった方が紛れがないですね。

DOS コマンド for


目的や条件が異なる場合は、コメントください。

id:wakutan

説明足らずですみません。

Kumappus さんの解釈で、間違いありません。

同じファイル名は複数ありませんので、問題ありません。

ありがとうございます。助かりました。

2007/06/10 01:25:42
  • id:Mook
    複数ある場合は、同じファイル名では上書きされてしまうので結果として最後のものしか残りませんが・・・。

    ファイル名を変えるか、パスのリストを作るのではダメですか?
  • id:taknt
    UNIX系ならなんとかできそうだが、MS-DOSでは 難しいかも。

    それに
    >移動させたいファイルの数がかなりあるので
    ということだが
    ひとつのフォルダに入れられる同一ファイル名は、ひとつしか
    置けない。

    無理にやろうとすると上書きになってしまう。
  • id:Kumappus
    いや、おそらくこういうことがしたいんでしょう。

    C:/*/指定のファイル → E:/へ。

    で指定のファイル名がいろいろあると。

    僕だったらもうあっさりcygwin入れてbash scriptでfind使って書いちゃうな。
  • id:Mook
    For /F "delims=" %%f IN ( E:\list.txt ) DO Call :MoveToMyFolder "%%f"

    For /F "delims=" %%f IN ( E:\bbb\list.txt ) DO Call :MoveToMyFolder "%%f"
    でした。


    けれど、もう少し状況の詳細がわからないと、適切な回答は難しいです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません