- ベストアンサー
バッチファイルの作り方
こんにちは、ただいま仕事で使用する場面もありまして、バッチファイルの作成の勉強中なのですが、調べてもなかなか分からないことがありましたので、質問させていただきます。 1つ目、ファイル名の変更 たとえば、P01001(2006.5.1).jpgというファイル名が有ります。このファイル名で、P01001をPic01と変換して、日付も括弧ごと消したいのですが、どうのようにすれば出来るのでしょうか?PをPicに変換と010を消す作業はすべて同じようにかかれていて、日付だけは、違う日付もあるので、それにも対応出来るようにしたいです。 02.次に中身の無いフォルダを検索して削除したいのですが、うまくいきません。rd コマンドでファイル名を*にしてもだめでした。 出来れば、フォルダの下の階層も検索して、消せる様にしたいのですが、やり方に検討もつきません、 是非お願いいたします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。遅くなりました。 >では、日付はイベントごとなので、有る程度決まっているので、 >一括で決まった文字列を削除するには、どうしたら、良いでしょうか? >P01001(2006.5.1).jpgの場合で、 >rename *(2006.5.1).jpg *.jpg >としてもだめですよね。 今回お問い合わせの件、P010→Picへの変換の話は無視していいのですか? >rename *(2006.5.1).jpg *.jpg が実行したいことだとすると、たくさんのファイルがあって、2006.5.1を 指定すると、(2006.5.1)がファイル名に含まれるファイル全部に対して、 ファイル名から(2006.5.1)を取り除きたいという事ですか? 例) P01001(2006.5.1).jpg → P01001.jpg P01999(2006.5.1).jpg → P01999.jpg rename コマンドではうまくいく場合と行かない場合があるので、 やはりバッチを作って実行するほうが確実です。 引数で指定した日付を括弧付きでファイル名から一括削除するバッチの例です。 --------------------------------------- rendate.bat echo off if "%1"=="" goto err for %%F in ( *%1*.jpg ) do call :sub "%%F" %1 exit /b :sub set FNAME=%1 call set FNAME=%%FNAME:(%2)=%% ren %1 %FNAME% goto :EOF :err echo 日付を指定してください echo 例) rendate 2006.5.1 やりたいことが違っているようでしたら、具体的にどのようなファイル(対象)を、 どのような指定(指示)で、結果どう変化させたいか(結果)を補足してください。
その他の回答 (5)
- pita-gora
- ベストアンサー率70% (102/145)
1つめについて 括弧内だけ削除するような都合のいいコマンドはありません。 ファイル名の括弧の位置が同じだとしてP01001の部分のみ取り出すことならできます。次の例の2行目が先頭から6文字分を取り出す記述です。 set x=P01001(2006.5.1).jpg set x=%x:~0,6% echo %x% また、PをPicに変換と010を消す作業は、言い換えるとP010をPicに置き換えればいいのですがこれは次のような例でかけます。 set x=P01001(2006.5.1).jpg set x=%x:P101=Pic% echo %x% そのほか、ファイル名をファイル名(%~n1)と拡張子(%~x1)に分けるコマンドなどを使ってフォルダ内のすべてのjpgファイルを対象にP010→Pic かつ7文字目以降(括弧の部分)を削除するバッチは以下のような例になります。 echo off for %%F in ( P010*.jpg ) do call :sub "%%F" exit /b :sub set FNAME=%~n1 set FNAME=%FNAME:~0,6% set FNAME=%FNAME:P010=Pic% ren %1 %FNAME%%~x1 goto :EOF 2番目 空のフォルダ(ファイルもサブフォルダも無い)を削除するバッチです。フォルダを削除してしまうので、念のため表示するだけのバッチになっています。最後から2行目の echo rd の部分を rd に変更すれば本当に削除します。 echo off for /R %%d in ( . ) do call :sub "%%d" exit /b :sub for /f "tokens=1-3" %%a in ('dir %1 ^| find "個のファイル"') do set fnum=%%a & set fsize=%%c set fsize=%fsize:,=% for /f "tokens=1" %%a in ('dir %1 ^| find "個のディレクトリ"') do set dir=%%a if %fnum% EQU 0 if %fsize% EQU 0 if %dir% EQU 2 echo rd %1 goto :EOF
- doki2
- ベストアンサー率51% (440/860)
ANo.2の修正です。 修正前:del %Source% 修正後:rd %Source%
- SEWANIN
- ベストアンサー率34% (203/592)
taka2003 様 バッチファイルを作製されようとするご事情が、 「ファイル名の変更」でしたらWindows上で文字通り 「ファイル名の変更」をなされば駄目ですか。 「中身の無いフォルダ」は屡々見受けられますが、 削除したいお気持ちも判らないではありません。 しかし、必ずしも削除して環境がよくなるかどうか と云うより、場合によってはそのままにして置いた方が 無難と云うこともあります。 元々バッチファイルはDOS時代にアプリケーションの 起動をスムースに行うためにインストールの都度作製して 来たことを思い出しました。 Windows上ではそのことに気を取られることが無くなって 楽になりました。 色々なDOSコマンドにご関心を持たれることには 敬服致しますが、どうしてもと仰ればDOS対応の アプリケーションでお試しになれば如何でしょうか。 と云ってもOSとしてDOSを使えるPCは余程 以前のマシンでないと無いのですが・・・。 NEC-9821シリーズではWindows98とを共存できます。 私は、その上でDOSアプリケーションを未だに 使ってもおります。無論しっかりバッチファイルを 組んでおります。
お礼
遅くなってしまって大変申し訳ありません、ご回答ありがとうございました。 書き方が悪かったみたいですね、名前の変更というのは、複数ファイルの一括変換です、 削除したいフォルダについても。マイドキュメントなど、自分で作成したものの中に有るものが対象で、バックアップを取る時に、クリーンにするためです、 Windowsフォルダの中身等を消したい訳ではないので、消えて困ることは無いかなと思います。
- doki2
- ベストアンサー率51% (440/860)
☆ヒント XCOPY /S 空の場合を除いて、ディレクトリとサブディレクトリをコピーします。 ☆バッチ作成例 Set Source=ソースフォルダ Set Target=ターゲットフォルダ XCOPY /S %Source% %Target% del %Source% ren %Target% %Source% ただし、「del %Source%」以降は危険なコマンドです。 サンプルフォルダを作成して結果を検証してから使うようにしてください。
お礼
遅くなってしまって大変申し訳ありません。 ご回答ありがとうございました。 空の場合を除いて、コピーということでしたら、それですべてコピーして、残っているファイルを削除で、出来ますね、コピーではなく、ムーブだったらもっと良かったですね、
- S.SASAKI [休日旅行人](@jt150vse)
- ベストアンサー率33% (38/115)
1つ目、ファイル名の変更 Windows98なら 自宅の本から 光文社 WindowsのDOSの機能がわかる本 ISBN4-87778-036-X 216Pより参考 ren のコマンド使います MS-DOSプロンプトをクリックし ren /? とすると使い方でます。 ファイルまたはディレクトリ名(複数可)の変更をします. RENAME [ドライブ:]パス][ディレクトリ名1 | ファイル名1] [ディレクトリ名2 | ファイル名2] REN [ドライブ:]パス][ディレクトリ名1 | ファイル名1] [ディレクトリ名2 | ファイル名2] 受け側用には新しいドライブもパスも指定できないので注意してください. 例 ren.bat ren P01001(2006.5.1).jpg Pic01.jpg ren P01002(2006.5.1).jpg Pic02.jpg ren P01003(2006.5.1).jpg Pic03.jpg ただしこれだとbatファイルを毎回書きなおすこととなります 一度ダミー(上のようなもの) メモ帳なので「置き換え」してファイル更新するかとおもいます。 あと分岐式IFとパラメータを使えば入力して一発変換が出きるかもしれません。 02.次に中身の無いフォルダを検索して削除したい については自信なし FINDコマンドとなにかをくみ合わせる? いやいやうれしいですXP全盛の世の中で DOSのバッチファイルのこと質問されるかたいて。 Windowsが出る前いろいろ作ってたような気がします。 ある程度年代上の人がご存知かもしれません。 これを駆使すると一種のプログラムみたいに自動可できますので。
お礼
大変遅くなってしまって申し訳ありません、ありがとうございます。 私が初めてパソコンをさわったのは、95がでた直後でしたから、バッチファイルなんて、存在自体を知ったのもここ半年くらいです。 いま思うとそれ以前から、さわれれば良かったと思っています。 一括変換を行いたいので、ifコマンドの勉強もしてみたいと思います。
お礼
遅くなってしまって大変申し訳ありません、ご回答ありがとうございます。 そこまで、都合の良いコマンドは無いのですね、 では、日付はイベントごとなので、有る程度決まっているので、 一括で決まった文字列を削除するには、どうしたら、良いでしょうか? P01001(2006.5.1).jpgの場合で、 rename *(2006.5.1).jpg *.jpg としてもだめですよね。 空のディレクトリは出来ました、ありがとうございました。