バッチファイルの使い方について

このQ&Aのポイント
  • バッチファイルを使って両面スキャンした画像ファイルを表面と裏面を別々のフォルダに振り分ける方法について質問しています。
  • 初めてバッチファイルを使用するため、うまくいかない状況です。
  • バッチファイルを作成し、画像ファイル(jpg)を格納したフォルダに置いても、フォルダは作成されますが、画像ファイルが移動せず、空のままです。
回答を見る
  • ベストアンサー

バッチファイルの使い方について

このサイトで、両面スキャンした画像ファイルを表面と裏面を別々のフォルダに振り分ける方法を質問して、バッチファイルを使う方法を教えてもらったのですが、上手くいきません。バッチファイルを使うのは初めてなので、どこかまずいところがあるのかと思います。 教えていただいた下記のものそのままでバッチファイルを作り、画像ファイル(jpg)を格納したフォルダに置いてダブルクリックすると、「1」「2」のフォルダができるだけで、画像ファイルは移動せず、2つのフォルダは空のままです。 どこを直せばよいのか教えてください。よろしくお願いします。 set N=1 mkdir 1 mkdir 2 for %%I in (*.jpg) do call :sub %%I goto :EOF :sub move %%I %N% set /a N=3-N goto :EOF

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.1

すいません。回答した者です。誤りに気づいたのですが、締め切られていたので。 set N=1 mkdir 1 mkdir 2 for %%I in (*.jpg) do call :sub %%I goto :EOF :sub move %1 %N% set /a N=3-N goto :EOF

Takechin8
質問者

お礼

二度にわたり即座の回答ありがとうございました。 move %I ではなく move %1 だったんですね。 お陰様でうまくいきました!千数百もの画像ファイルが一瞬のうちに2つのフォルダにきれいに分けられたのには感動しました。 バッチファイルのしくみを少しだけ理解することもでき(実際に使うにはほど遠いのですが)、感謝しております。本当にありがとうございました。

関連するQ&A

  • バッチファイルでの%を含むファイル名の取得

    以下はEドライブを走査してフォルダごとのjpgやpngなどのファイルの数を全て表示するバッチ処理ですが。基本的に上手く動きますが%を含むファイル名、フォルダ名に当たると上手く動きません。どうしたらいいでしょうか?”ファイル名、フォルダ名に%を使うな”という回答以外でお願いします。 @echo off pushd E:\ for /f "delims=" %%j in ('dir /b /s /a:d') do call :sub "%%j" exit /b :sub echo /////////////////////////////////////////////////////////////////////////// for /f "delims=" %%x in ('dir /b %1 ^| find /c ".jpg"') do call :jpg %%x for /f "delims=" %%x in ('dir /b %1 ^| find /c ".JPG"') do call :jpg2 %%x for /f "delims=" %%x in ('dir /b %1 ^| find /c ".png"') do call :png %%x for /f "delims=" %%x in ('dir /b %1 ^| find /c ".bmp"') do call :bmp %%x echo %1 echo jpg %jpg_c% echo png %png_c% echo bmp %bmp_c% echo JPG %jpg2_c% goto :EOF :jpg set jpg_c=%1 :echo %1 goto:EOF :jpg2 set jpg2_c=%1 :echo %1 goto:EOF :png set png_c=%1 :echo %1 goto:EOF :bmp set bmp_c=%1 :echo %1 goto:EOF :all set all_c=%1 :echo %1 goto:EOF

  • DOSのバッチファイルについての質問です。

    DOSのバッチファイルについての質問です。 フォルダ内のファイルネームを一括変更したいと考えています。 変更したい文字がたくさんあり、その都度インプットして処理したいと思い 下記のようなバッチを組んだのですが上手く動きません。 何かいい方法があればご教授下さい。よろしくお願いします。 echo off SET /P word= for %%a in (*%word%*) do call :sub "%%a" exit /b :sub set fname=%~1 set fname=%fname:%woad%=ああ% ren %1 "%fname%" goto :EOF

  • バッチの実行順序を教えて下さい。

    for %%F in (南條愛乃・エオルゼアより愛をこめて*.mp3) do call :sub1 "%%F" goto :EOF1 :sub1 set Bstr1=%1 set Bstr2=%Bstr1:~1,17% set Bstr4=%Bstr1:~19,256% set Bstr5=%Bstr2%_%Bstr4% rename %Bstr1% "%Bstr5% move "%Bstr5% "trush\%Bstr5% ffmpeg -i "trush\%Bstr5% -ab 48k "%Bstr5% goto :EOF1 :EOF1

  • こちらのバッチファイルの改修をお願いしたいです。

    過去に別のIDで質問したのですがパス紛失してしまったので・・・ http://okwave.jp/qa/q6858298.html?&status=true&errcode=&msg=&qid=6858298 改修の内容としては下記2点になります。 【○○】 [△△] □□.txt (1)○○や△△の部分にドット等の記号があるとそのファイルはスルーしてしまうので、スルーせずに動くように。 (2)もし、同じファイル名があったら上書きせずに「C:\被り」のフォルダに振り分ける。 どなたかお手すきでしたらよろしくお願い致します。 ----------- echo off set from=C:\振り分け set to=C:\整理済 for /f "delims=" %%a in ( 'dir /b "%from%\*.txt"' ) do call :sub "%%a" echo 振り分け終了しました exit /b :sub for /f "tokens=1 delims=]" %%f in ( "%~n1" ) do set findname=%%f] :FolderA if exist "%to%\A\%findname%*" move "%from%\%~nx1" "%to%\A\"&&goto :EOF :FolderB if exist "%to%\B\%findname%*" move "%from%\%~nx1" "%to%\B\"&&goto :EOF :FolderC if exist "%to%\C\%findname%*" move "%from%\%~nx1" "%to%\C\" goto :EOF

  • バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが

    バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが開けない (1)と(2)のバッチファイルを作りました。それぞれ単体で実行すると、エラーは出ません。 (1)と(2)を一緒にした(3)というバッチファイルで実行すると、FINDSTRのところで、 「ファイルを開くことができません」というエラーが出て、途中でとまってしまいます。 エラーを出さずに実行する方法は何かないでしょうか? (A.batは、CドライブにあるWord.exeを実行するだけのバッチファイルです。) どうぞよろしくお願いします。 【(3)の中身】 call A.bat >kekka.txt   ←この1行だけが(1)のバッチファイルの中身です GOTO kensaku GOTO :EOF ::文字列検索 :kensaku SET keyword=作成しました。   ←この行から下が(2)のバッチファイルの中身です FINDSTR %keyword% kensaku.txt > NUL GOTO kekka%ERRORLEVEL% GOTO :EOF :kekka0 REM 文字列あり ECHO %keyword%がありました PAUSE > nul GOTO :EOF :kekka1 REM 文字列なし ECHO %keyword%はありませんでした。 PAUSE > nul GOTO :EOF

  • バッチファイル、変数について

    windows2012R2で下記のようなバッチファイルを作成しました。 --------------- Set YYYY=%Date:~0,4% Set MM=%Date:~5,2% Set DD=%Date:~8,2% Set File=%YYYY%%MM%%DD% mkdir G:\bbb\xx1_%File% move G:\aaa\xxx* G:\bbb\xx1_%File% --------------- としてもフォルダは作成されておりましたが、xxxフォルダの中身が移動されておりませんでした。 どなたかお分かりの方がおりましたら、お願い致します。

  • バッチファイルによるフォルダ名の変更

    バッチファイルによるフォルダ名の変更 あるフォルダに存在する日付(西暦)を名称としたフォルダ、例えば 2010-0530 を、バッチファイルを実行することで、和暦(元号)、例えば H220530 に名前を変え、その後に特定のアプリケーション(Picasa3)を実行したいのです。 インターネット上の情報を参考に、 @echo off cd /d K:\VIDEOPHOTO\H220401から for /d %%f in ( * ) do call :sub "%%f" start C:\"Program Files\Google\Picasa3\Picasa3.exe" exit /b :sub set dirname=%1 set dirname=%dirname:(=【% set dirname=%dirname:)=】% set dirname=%dirname:2010-=H22% ren %1 %dirname% goto :EOF というバッチファイルを作り、概ね希望どおりの結果となったのですが、既に同名のフォルダが存在していた場合(例ではH220530というフォルダが既に存在)、フォルダ名の変更はされずスルーされてしまいます。 既に同名のフォルダが存在していても、フォルダ名を変更(既存フォルダと統合)することはできますでしょうか?

  • 条件分岐のバッチファイル

    「D&Dした複数ファイルを、そのファイル名と同名のフォルダ(既に作成済み)の中にある、Aというフォルダに移動する。」という動作をするバッチファイルを、以前の質問などを参考にしながらわからないなりに作ってみました。 :LOOP if %1 == "" GOTO XEND move %1 "C:\Documents and Settings\(ユーザー名)\デスクトップ\%~n1\A" SHIFT GOTO LOOP :XEND PAUSE これで動作したのですが、これにさらに 「ファイルの拡張子がjpgならフォルダAへ、bmpならフォルダBへ、  pngかつファイルサイズが2MB以下ならばフォルダCへ、それ以上ならフォルダDへ移動」 という動作を追加したいです。結構複雑なのですが、これはバッチファイルで可能なのでしょうか? 長文の上、わかりにくくてすいません。 可能ならば、どなたか教えていただけないでしょうか。よろしくお願いします。

  • バッチファイルで悩んでいます。

    プログラミング初心者です。 御教授の程、宜しくお願いします。 以下のプログラムは 1.ユーザーからフォルダをドラッグ・アンド・ドロップしてもらう。 2.ユーザーに日付を入力してもらう(yyyymmdd方式) 3.ユーザーに下記の2つから選んでもらう。   1.入力した日付よりも前に更新されたファイルを表示   2.入力した日付よりも後に更新されたファイルを表示 4.ユーザーから受け付けた条件で、サブフォルダも含めて   コマンドプロンプト上に    更新日時 ファイルへのパス   を表示する。 ------------------------------------------- list.bat echo off set /P YYYYMMDD=日付を入力してください(YYYYMMDD): :loop echo ---------------------------------------------------- echo 入力した日付よりも前に更新されたファイルを表示 - [1] echo 入力した日付よりも後に更新されたファイルを表示 - [2] echo ---------------------------------------------------- set /P chk= 1 か 2 を入力してください: if not defined chk goto loop if %chk% EQU 1 set op=LSS&goto listup if %chk% EQU 2 set op=GTR&goto listup goto loop :listup echo. for /R %1 %%F in ( *.* ) do call :sub "%%~fnxF" %%~tF cmd /k :sub set fdate=%2 set fdate=%fdate:/=% if %fdate% %op% %YYYYMMDD% echo %2 %3 %1 goto :EOF このプログラムに関しまして、 4.ユーザーから受け付けた条件で、サブフォルダも含めて   コマンドプロンプト上に    更新日時 ファイルへのパス   を表示する。 をコマンドプロンプト上にではなく、エクセルファイル上に変更したいです。 教えて頂きますと助かります。 それでは、宜しくお願い致します。

  • バッチファイル内置換

    バッチファイルで、置換をしたいのですが、"="と"<"の置換が出来ません。 ping出力を「file.txt」へ保存し、保存した「file.txt」を一行づつ読み出し下記を実行しています。 for /f "delims=" %%a in ( orig ) do ( set line=%%a call :sub ) :sub set tmp=%line% set tmp=%tmp:<=,% set tmp=%tmp:= =,,% set tmp=%tmp:"時間" =,% set tmp=%tmp:ms=,ms% echo %tmp%>>%CSV_Name% goto :EOF :end 置換出来ないのは、"=" と "<"の文字だけが置換出来ません。 ネットで調べたのですが、"^" でエスケープしても、""二重引用部でくくっても、正しく置換でき有ません。