• ベストアンサー

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