WindowsのDOSプロンプトを使ってファイルの削除とリネームをする方法

このQ&Aのポイント
  • WindowsのDOSプロンプトを使用して、ファイル容量が0KBのファイルを削除する方法と、ファイルのリネーム(番号を詰める)方法について教えてください。
  • Unixベースのマシンからログファイルを取得し、WindowsXPマシンで一括してファイルの削除とリネームを行いたいです。
  • バッチを使用して、WindowsのDOSプロンプトを起動し、DELコマンドを使ってファイル容量が0KBのファイルを削除し、ファイルのリネームを行う方法について教えてください。また、Unixマシンからのログファイルの取得方法も教えてください。
回答を見る
  • ベストアンサー

DOSコマンド DELを使って....

WindowsのDOSプロンプトを使ってファイルの削除を行いたいです。 とは言っても、わがままな(?)機能を探しているのですが.... ファイル名   file1.log.001 ・・・ファイル容量  0KB   file1.log.002 ・・・ファイル容量   0KB   file1.log.003 ・・・ファイル容量 100KB   file1.log.004 ・・・ファイル容量 100KB の内、ファイル容量0KBのみを探し出して消したいのです。  もちろんコマンドを直接打ち込むのであれば、    c:> del file1.log.001エンター    c:> del file1.log.002エンター でいいことはわかっているのですが、バッチを組んで0KBのファイルのみを消したい。  また、残った003と004の名前も変えたいのです。    file1.log.003 → log001.log    file1.log.004 → log002.log と番号を詰めて....  あるUnixベースのマシンで、日々ログを積み上げていくのですが、古いログファイルは削除 されていきます。  ftpで一旦、WindowsXPマシンでgetしてきて、上の作業をやらせたいのですが、実際は20 以上のログファイルがあります。  一回一回手打ちするのではなく、バッチで一気にやる方法を探しています。  Unixマシンからのgetは、バッチ内に    ftp -s:fileget.txt を1行目に作成。  fileget.tstの中身は下記 --------------------------   open マシン名   ユーザー名   パスワード   get file1.log.001   get file1.log.002   get file1.log.003   get file1.log.004   get file1.log.005   get file1.log.006   get file1.log.007   get file1.log.008   get file1.log.009 : by ----------------------------- 結果、Unixマシンには無いfile1.log.001というファイルが容量0KBでWindows内にできて しまっています。  つたない文章でわかりづらいかもしれませんが、ご助言願います。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4845/10256)
回答No.4

No3です。 VMSはUnixと関係の無いOSです。メーカーのDECがもうずいぶん前にCOMPAQに吸収され、そのCOMPAQもHPと合併したので、マイナーになり情報もあまりないでしょうね。 ; のあとの数字は世代番号じゃなかったでしたっけ。拡張子とは異なるので、扱いはFTPサーバーの処理次第だと思います。

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4845/10256)
回答No.3

fileget.tstの中身を、 --------------------------   open マシン名   ユーザー名   パスワード   prompt   mget file1.log.*   quit ----------------------------- にすれば、file1.log.* に該当する存在するファイルだけがgetできます。 mget file*.log.* とかでも大丈夫。 バッチファイルで、ファイルサイズゼロのファイルだけを削除するのは、 for %%F in ( file1.log.* ) do if %%~zF == 0 del %%F です。コマンドを直接打つときは%は1つだけ。 番号を振り直すバッチ処理は面倒だけど出来ます。mget がうまくいかなければ再度聞いてください。

guest_zzzz
質問者

お礼

バッチの中で for ~ ができるとは....20年以上前のPC-DOSのコマンド本にも載ってましたが、 これまで使ったことありませんでした。 WindowsのDOSプロンプトから for /? でもヘルプが現れて目からウロコです。 もちろん、教えていただいた記述でoKBのファイルを削除できました。 で、mgetですが、実際、会社でいろいろ確認してみました。 Unixベースマシンとしていたのは Open VMS VAX というOSでした。 ログのファイル名は FILE_NAME.LOG;04 って感じのファイルです。(末尾の2桁数字が複数ある) Windowsからgetしようと試した結果が次です。 1.get FILE_NAME.LOG;04     とするとWindowsでは FILE_NAME.LOG ができて次の末尾05,06,07..のファイルは上書き 2.get FILE_NAME.LOG.04     とするとWindowsでは FILE_NAME.LOG.04 ができてる。次の末尾05のファイルもget OK。 3.mget FILE_NAME.LOG;*     とするとWindowsでは 1.と同じ結果 4.mget FILE_NAME.LOG.*     とするとWindowsでは 1.と同じ結果 なので、2.の記述でファイル1つづつを記述しないとならない状態です。     

guest_zzzz
質問者

補足

回答ありがとうございます。 なぜか、mgetコマンドが使えなかったんです...Unixマシンのせいなのか... for %%F in ( file1.log.* ) do if %%~zF == 0 del %%F については、明日以降、試してみます。 ありがとうございました。

  • Gletscher
  • ベストアンサー率23% (1525/6504)
回答No.2

forでループを組んで、if(exist・・・)を使って判断を入れれば、1行づつ書かなくても全てのファイルを舐めることはできますが、残念ながらファイル容量を所得するコマンドはありませんので、MS-DOSコマンドだけではできないですね。 ファイル名の変更は、renコマンドで良いですね。

guest_zzzz
質問者

お礼

回答ありがとうございます。 No.1で回答くださった方法、No.3で回答くださった方法を試してみます。

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.1

バッチ記述用の完全構造化言語のBSLスーパーバッチというソフトがあります。 WindowsPCで使用しますが、DOSプロンプト上で動作します。 #FSizeという「ファイルの大きさ」関数が使えますので、0バイトのファイルを消すことができます。 #IsFileという「ファイルの存在の判定」関数もあります。 もちろん、変数も使用できますので、希望通りのことができそうです。 一度使用したことがあるので、分からなければ聞いてください。 ヘルプは充実していますので、何かしらプログラムを作成したことがある人ならすぐ理解できると思います。 詳しくは、ダウンロードしてヘルプを参照願います。

参考URL:
http://www.vector.co.jp/soft/dl/win95/util/se070879.html
guest_zzzz
質問者

お礼

早速の回答ありがとうございます。 明日以降(明日とは言い切れない^^;)、試してみます。 結果は、またお知らせいたします。

guest_zzzz
質問者

補足

BSLスーパーバッチを試してみました。 ヘルプ参照してみましたが、残念ながら、プログラム書いたことのない私にはチンプンカンプンでした...。 「変数」と「環境変数」の違い、if else文とfor文の使い分けさえわかりません。 プログラムは20年くらい前、PC-DOSのREXXで1つだけバイオリズム計算を自作したことがあるくらいです。 Excelのマクロも自動記憶を使うくらいで.... また、よかったら、ご助言ください。

関連するQ&A

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

    こんばんわ。 今回はコマンドプロンプトのFTPコマンドについて質問させてください。 処理概要 Windowsバッチにて、サーバA(Windows)からサーバB(UNIX)にFTPでファイルを複数送りたい その際、FTPが成功したか失敗したかをログファイルに出力したい。 以下プログラム set logDir=C:\hogehoge\log\ set settingFileName=C:\hogehoge\upload.ftp set execDate=%date:~-10,4%%date:~-5,2%%date:~-2,2% set logFileName=%logDir%log_%execDate%.txt echo FTPバッチ起動 >> "%logFileName%" cd C:\hogehoge echo FTP開始 >> "%logFileName%" ftp -s:"%settingFileName% >> "%logFileName%" upload.ftpというファイルには以下のように記述しております。 ftp open サーバIP ポート ログインID パスワード binary prompt mput *.csv bye この2種類のファイルで、FTPは出来るのですが、 どうにかして成功/失敗を判断したいです。 どなたかわかる方、ご教授お願いいたします。 補足 UNIX上のバッチ処理(Cシェル)でもファイルがあるかどうか判断していますが、 WindowsでFTP失敗の場合、メールを送りたくてこのようなバッチを作成しました。

  • DOSコマンドでアドバイスをお願いします

    よろしくお願いします。 Windows2003サーバのDOSコマンドで サーバのメンテナンス機能の開発を検討しています。 下記のロジックについて、お手数ですが、 サンプルなど頂けると助かります。 サーバ上に散在するログファイルを、 そのサーバ上の一か所のディレクトリに 集めたい、というのが要望です。 test.lstというリストファイルがあり、 そこにはサーバ上のログファイルなどが記載されています。 C:\temp\test.log C:\program files\data\data.log C:\data\execute.log ・・・ これらのファイル名をループで読み込みながら、コピーし、 「C:\Backup」にそのコピーを集めていきたいと思います。 DOSコマンドによるバッチでこれは実現可能でしょうか?。 よろしくお願いします。

  • ディレクトリ削除の DOS コマンド

    Windows XP SP2 ログオン・ログオフスクリプトでテンポラリディレクトリ内の掃除をしたいと思っています(ログオフ時に全削除) ディレクトリ内のファイルは del /F /Q /S *.* で消せるのですが、ディレクトリが消せません。ディレクトリを削除するコマンド rd はワイルドカードが使えないようです。 Unix のように rm -r ./* とかって無いのでしょうか?

  • del で確認なしで削除した

    バッチファイルを作り、 指定のフォルダをdel *.*で、削除したいのですが 確認メッセージを聞かれないにはどうするのでしょうか? 又、UNIXのmanのように、Windowsでは、del の使い方を 確認する方法はありますか?

  • バッチファイルにてFTPで指定したファイルを取得する

    OSはWindoswXPProです。 以下のようなBATファイルとバッチファイルを作成しました。 ---FTP.bat--- echo off ftp -s:get.ftp ---get.ftp--- open 10.0.X.X username password cd /log get log.yymmdd(実際には日付) c:\access_all_log.txt quit logというディレクトリには日次でログファイルが作成され ファイル名としてlog.yymmddと名づけられています。 やりたいことは2つあります。 1つめはftpするファイル名の日付部分をコマンドなどから 範囲指定して取得するファイルを指定できないか。 (たとえば070301~070315のファイルを一括で取得したい) 2つ目はftpでのファイル取得終了後に続いて バッチスクリプトを流したいのですが、その方法。 お分かりになる方いらっしゃいましたらよろしくお願いいたします。

  • quoteコマンドとは

    UNIXマシンからIBM AS400へのFTP送信のバッチ文で、 quote rcmd xxxx yyyy という行があるのですが、 この quote rcmd は どういったいみですか?

  • DOS上で、UNIXのShellに代替されるものってありますか?

    あるPCから別のマシンにftpを使ってファイルを転送するのですが、作業者(ファイル転送をする人)がftpコマンドなどが使えないため、 パソコンのDOS画面(コマンド実行)から、キーをひとつたたけば、ファイル転送してくれる仕組みをつくりたいのです。(ファイル名は固定のものが数個。転送するのは1ファイル単位でまとめての転送はしない) UNIX上ならftpコマンドを発行するシェルを作れば済むと思うのですが、DOS上ではどうなのでしょうか? UNIXのシェルのようなものはあるのでしょうか?

  • DOSコマンドとか。。。

    コンパイルログが表示されている Dos画面のログをテキスト出力する方法は どうすればよいでしょうか。 コンパイルコマンド + > ファイル名 以外の方法でよろしくお願いします。 Windows2000を使用しています。 共有コンピュータの共有フォルダにアクセスする バッチファイルを作成しようと考えています。 共有フォルダにはユーザー名とパスワードを入力する 必要があり、毎回入力するのがめんどくさいからです。 どのように記述すればよいでしょうか? 以上 よろしくお願いします。

  • DOSコマンド(バッチファイル)の記述方法について

    Webサイトで、掲示板のログを定期的にFTPダウンロードして管理する運用を考えています。 DOSのFTPコマンドでダウンロードして、タスクで定時実行する所まで、できたのですが、いつも決まった場所にダウンロードするため、データが毎回上書きされてしまいます。 それで、FTPダウンロードの直前に、DOSコマンド(バッチファイル)で別フォルダを作ってデータを退避させるようにしたいのです。 もしできれば『2006_02_20_16_00』など、バッチファイル実行時の日時(年月日、時刻まで)が分かるようなフォルダ名にしたいです。 そんな事できるのでしょうか? DOSコマンドに詳しくないので、分かる方教えてください。 ダウンロードするフォルダは、『c:\Backup\』だとして、書き方の例を教えてください。 よろしくお願いします。

  • 【ftp】lsで表示されているファイルをgetしたがエラーとなった。

    はじめましてよろしくお願いします。 lsで表示されるファイルをgetしようとして、 ファイルが無いといったエラーが出てダウンロードできません。 ファイル容量が10MB近くあるのが原因かなーとか思ったのですが、どうなんでしょうか?? ちなみに、同じディレクトリにある別ファイル(容量5kbくらい)は正常にダウンロードできました。 具体的には以下です。 -------------- ftp> get 1.log 200 PORT command successful. 550 1.log: No such file or directory. ftp> --------------