• ベストアンサー

MS-DOSコマンド

下記の事を実現できる方法をお教え下さい。 (1)ファイルから複数の文字列を取得 (2)取得した文字列を基にファイルを削除 (1)の文字列はファイル名を取得します。 または、2つのディレクトリで共通のファイルを 削除する場合の方法でも結構です。 よろしくお願いします。

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

  • ベストアンサー
  • BILLY-J
  • ベストアンサー率57% (60/105)
回答No.3

こんばんは。 #2の補足に対してお答え致します。 > ファイルの中身は単純にファイル名のみです。パスは記述しません。 この場合は、先にカレントディレクトリを対象ファイルが有る場所まで 移動しておけばOKです。 逆に対象パスが固定(例として E:\CSVDATA\ とすると)なら for /f "tokens=*" %f in (del_list.txt) do del /q E:\CSVDATA\"%f" のように書いても行けると思います。 先にカレントディレクトリを移動させるなら cd /d E:\CSVDATA\ for /f "tokens=*" %f in (del_list.txt) do del /q "%f" の2段階になります。 但し、この場合は del_list.txt の側を見失わないようにパス付きで 書く必要が有るかも知れません。 > あと、終了を示す「*」なども存在しません。 これは、私が書いた例の ≫ C:\TEMP\MYTMP\* について言ってます? この書き方は『ワイルドカード』と言って、この例なら C:\TEMP\MYTMP\ の下に有るファイル全部、という意味です。 色々応用が有って、「*.csv」と書けば拡張子「csv」のファイルを全て という意味になります。 コマンドライン上で使える標準書式なので、覚えておくと後々便利ですよ。

momo_right
質問者

お礼

すみません。補足を出しましたが実現できました。 度々の回答ありがとうございました。

momo_right
質問者

補足

回答ありがとうございます。 お教え頂いたことを試しましたが、うまく行きません。 「指定した名前は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されません。」というエラーになってしまいます。 原因が分からないので詰まってしまいました。またファイルのデリミタは改行ですがそれはOKなんでしょうか? (試しに/fとオプションを外してみました。すると「in(ファイル名)の使い方が誤っています」と出力されました。) また、tokensの使い方もhelpをみましたがいまいち分かりません。 度々で申し訳ありませんがお教え願えますでしょうか。

その他の回答 (2)

  • BILLY-J
  • ベストアンサー率57% (60/105)
回答No.2

こんばんは。 FOR 文を使うことでコマンドラインでもバッチファイルでも実現 できます。 例えば読み込むファイル名を del_list.txt とした場合、 del_list.txt の中には C:\TEMP\~DF5CDE.tmp C:\TEMP\~DF6684.tmp D:\WORK\DUMMY.DAT C:\TEMP\MYTMP\*  ・・・・・・ のように削除対象ファイル名をフルパス表記で列挙しておきます。 ファイル名部分はワイルドカードでも可です。 そして、コマンドラインなら for /f "tokens=*" %f in (del_list.txt) do del /q "%f" バッチファイル中での処理なら for /f "tokens=*" %%f in (del_list.txt) do del /q "%%f" やりたい事合ってます?

momo_right
質問者

補足

回答ありがとうございます。 やりたいことは合ってます。 ファイルの中身は単純にファイル名のみです。パスは記述しません。 20030917.csv 20030918.csv 20030920.csv という感じです。 このファイル名と同じファイルを削除したいです。 あと、終了を示す「*」なども存在しません。 こんな感じの実現はできるのでしょうか?

  • sanbuxiu
  • ベストアンサー率25% (19/76)
回答No.1

1,dir 2,del *を使ったワイルドカードの利用も便利です。 拡張子はお分かりになりますね。 わからなければ再質問してください。

momo_right
質問者

お礼

回答ありがとうございます。 単体のコマンドなら知っているんが、ちょっと処理を加えたいときが難しいです。 また、delを使って試行錯誤していたときに、パイプでファイル名を渡そうとしたのですが、うまく行きませんでした。delにはパイプが不可なんでしょうかね。 ありがとうございました。

関連するQ&A

  • UNIXコマンド "grep" "find" の使い方教えて下さい。

    1)以下(1)、(2)を検索したいとします。  (1)"wrk_str"という文字列の記述があるファイル名  (2)tmp_file.c という名前のファイル名 2)ディレクトリ構成が以下になってるとします。  /home/users/複数のディレクトリが存在/複数のディレクトリが存在/複数のファイルが存在 3)/home/users/ 配下に検索したい文字列、ファイルがあるとした場合、どのように   探せばいいでしょうか?   /home/users/配下で得に条件なしでgrepすると、"Arg list too long"(量が多い?)の   メッセージが出て、検索できませんでした。 UNIXコマンドに詳しい方、宜しくお願いします。 それ以外にも、色々検索方法知っていたら教えて下さい!!

  • コマンドプロンプトでファイル名を変更

    をしたいのです。というのは あるディレクトリの中の全部のファイル名の 頭にaaaという文字列をつけたのですが どうしたらよいかわかりません。 RENというコマンドを使う事だけはわかりました。 しかし全体を変更する方法がわかりません。 お願いします。

  • dirコマンドで取得した結果を加工したい。

    お世話になります。 windows上のディレクトリ及びファイル情報を一括で CSV形式で出力したいと思っています。 ご教示ください。 【CSV出力要件】 1カラム目:ディレクトリ若しくはファイルの日付       出力例       (時刻)2017/06/14 17:12 2カラム目:ディレクトリのパス・ファイル名を記載       出力例       (デイレクトリの場合)C:\testdirectory       (ファイルの場合)C:\testdirectory\test.txt 3カラム目:ディレクトリサイズ、ファイルサイズを記載       ディレクトリの場合、配下全ての容量を記載       ファイルの場合、そのファイルサイズを記載 4カラム目:ファイル拡張子を記載 5カラム目:ディレクトリの場合は、Directoryと記載       ファイルの場合は、Fileと記載       ショートカットの場合、shortcutと記載 【設計要件】 ・[dir /S]コマンドで、Windows上のディスク情報を取得する。 ・Linuxのbashで取得結果をCSVに出力する。  ※上記、CSVに出力するファイル名は、windows_dir.csvとする。 ・CSV出力のカラムは前記の通りとする。 ・Dirコマンドで出力される下記を削除する。  1)〇〇個のファイル~バイト(省略)  2)[dir /S]取得結果のファイルの総数:(省略)は削除する。     [dir /S]取得結果の個のファイル~バイト(省略)は削除する。     [dir /S]取得結果の個のディレクトリ~バイトの空き領域(省略)は削除する。  3)[dir /S]取得結果の<DIR>の記述は削除は削除する。  4)ディレクトリの個数をテキストファイルへ出力する    ファイルの個数をテキストファイルに出力する。    個々の拡張子毎にその拡張子の個数をテキストファイルに出力する。    ※上記出力するテキストファイル名は、kakuchoushi.txtとする。  5)[dir /S]取得結果の空白行は削除する。  6)取得時は、開始時刻、終了時刻を記載する。  7)出力結果の文字コードはSJISになっているため、UTF-8に変換する。  8)出力結果の改行コードはCRLFになっているため、LFに変換する。 【留意点】 ・新たに取得し直せばいいのですが、既存の取得済み結果から、  結果を取り出したいと思っております。  ※取得し直しのコメントは無しでお願いいたします。m(_ _)m よろしくお願いいたします。

  • Telnetコマンド/ディレクトリ内の複数ファイルの中から特定の文字列を置換したい

    TelnetでLinuxにログインしています。 ディレクトリ内の複数ファイルの中から特定の文字列を置換したいのですが、その方法(コマンド)がわかりません。 例えば、/webディレクトリ内にある全ファイルの中から、「abc」という文字列を見つけて、それを「xyz」に置換したいのです。 どうぞ、ご指南の程、宜しくお願い致します。

  • 複数のファイル名の一部を変換したい

    あるディレクトリにある複数のファイルの一部の文字を別の文字に置き換えたいのですが、 どのようなコマンドで実現できますか? 変換前 *AAA* absdAAAfdsad.dat fdAAAsfds.txt fdffdAAAs.sh ffdfAAAdsAfds.xx 変換後 *BBB* absdBBBfdsad.dat fdBBBsfds.txt fdffdBBBs.sh ffdfBBBdsAfds.xx 変換したいファイル名は上記のようにファイル名の長さが違いますが、 各ファイル名の一部に共通の文字列が用いられています。 ファイルが100個ぐらいあるので手作業では大変なので、 これをコマンド一発で変換したいのです。 環境はcygwinでやっています。 もしwindowsのエクスプローラやDOSコマンドで実現可能ならそちらでも教えていただけると助かります。 よろしくお願いします。

  • ファイルを検索するコマンド findの使い方

    ファイル名にある文字列を含むファイルの検索の仕方がわかりません.具体的にはsolという文字列を含むファイルの検索です.確かfind -name なんとかだったような気がするのですがよくわかりません.ディレクトリはいろいろで拡張子は不明です.よろしくお願いします.

  • MS-DOSでのファイル/フォルダ一括削除

    以下のようなフォルダ、ファイルがあるとし、LOGDIR下にある「200803」の文字列を 含まないファイル及びフォルダをDOSコマンド(Win2003)で削除(できれば一括で) する方法を模索しています。 Cドライブ   |   |   +LOGDIR      |      +---LOG20080228_084539    <--- 削除対象ディレクトリ      |     |      |     +-------log1.txt      |     |      |     +-------log2.txt      +---LOG20080229_101553    <--- 削除対象ディレクトリ      |     |      |     +-------log1.txt      |     |      |     +-------log2.txt      +---LOG20080301_132059    <--- 削除対象ディレクトリでない      |     |      |     +-------log1.txt      |     |      |     +-------log2.txt      +---LOG20080302_185945    <--- 削除対象ディレクトリでない      |     |      |     +-------log1.txt      |     |      |     +-------log2.txt      |      |-----test20080229_085523.txt    <--- 削除対象ファイル      |      |-----test20080229_092310.txt    <--- 削除対象ファイル      |      |-----test20080301_153859.txt    <--- 削除対象ファイルでない      | 方法をご存知の方、いらっしゃいませんか?

  • PHPで、該当ファイルの一つ上のディレクトリ名を取得したいのですが、そ

    PHPで、該当ファイルの一つ上のディレクトリ名を取得したいのですが、そのような関数はございますでしょうか? 例えば、該当のページが 「http://example.com/abc/top.php」 だった場合、 「abc」を文字列として取得したいです。 自分のファイル名を取得する時はbasenameという関数を使う所までは 分かったのですが、一つ上のディレクトリ名を取得する関数を探す事が 出来ませんでした。ご教授頂けると大変助かります。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • DOSコマンドについて

    DOSコマンドで下記の2つを実現したくて色々と 調べてみたのですがわかりませんでした。 (1)バッチファイルを実行したら、DOSプロンプトの  画面が立ち上がり、検索したい文字を入力できる  状態にする。 (2) (1)で入力された文字列が2文字以上だった場合は  エラーメッセージを表示し、再度入力させる。 (3)(1)で入力した文字列を任意のファイル内で検索し、  あれば大文字⇒小文字に変換する。 echoとpromptというコマンドを使って入力画面を 表示させることができるのかと思いましたが なかなかうまくいかない状態でした。 何か参考になるサイトがあれば教えて頂ければ幸いです。

  • 【正規表現】検索文字の前後の行を削除したい

    正規表現がらみで困っていることがあります。 とあるディレクト以下にある複数ファイルの中身を検索して、該当する文字列にヒットした場合その文字列の行とその前後の行を削除したいと思っております。 該当文字列は1ファイルの中に複数ありますが、連続はしてないことはわかっております。 ※ちなみにディレクトリ以下としておりますが、ディレクトリの下にはサブディレクトリが数階層あり、サブディレクトリの中のファイルも検索対象です。 現状findとsedで試行錯誤トライ&エラーを繰り返し中 どなたかお力頂戴できれば幸いです。 どうぞよろしくお願いいたします。