- ベストアンサー
BATで特定のファイル/文字列があったら%COMPUTERNAME%-0000.txtと出力したいです。
- BATで特定のファイル・フォルダ/文字列があったら%COMPUTERNAME%-0000.txtと出力する方法を教えてください。
- 現在、ログインスクリプトを使用して、%COMPUTERNAME%-sample有 or %COMPUTERNAME%-sample無.txt、%COMPUTERNAME%-office2007有.txt or %COMPUTERNAME%-office2007無.txtなど、ファイル単位で出力しています。
- しかし、これでは集計が煩雑になるため、EXCELでの加工を試みていますが、うまくいっていません。どのようにすれば効率的にファイルの管理ができるでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
確認事項への回答ありがとうございます。いただいた回答と自分が聞きたかったこととでずれがありましたが、utakataXEX さんへの補足もあわせて状況は理解いたしました。 ですが、あなたが本当にやりたいことは、そのようなファイルを各マシンで作成し、人手で >EXCELにファイル名をコピペし、関数で右から何桁目が0だったら"○""×"という具合に集計 することではなく、添付画像のようなエクセル表がほしいということではないですか? というか、ファイル名のコピペなんて面倒くさいことをなぜ行おうとしているのでしょうか? というわけで、添付画像の表として読み込めるデータを作る方法を考えました。 まずはログインスクリプトとして実行するバッチファイルです(utakataXEX さんの回答を参考にしました)。 ---------- @echo off set machine_status="%COMPUTERNAME%" if exist "C:\TEMP\sample.txt" ( set machine_status=%machine_status%,○ ) else ( set machine_status=%machine_status%,× ) if exist "C:\TEMP\softcheck.txt" ( set machine_status=%machine_status%,○ ) else ( set machine_status=%machine_status%,× ) if exist "C:\Program Files\Hidemaru" ( set machine_status=%machine_status%,○ ) else ( set machine_status=%machine_status%,× ) if exist "C:\Program Files\Windows Media Player" ( set machine_status=%machine_status%,○ ) else ( set machine_status=%machine_status%,× ) echo %machine_status%>%COMPUTERNAME%.txt ---------- これで、SAGITARIUSというマシン名の場合、内容が "SAGITARIUS",×,×,×,○ という SAGITARIUS.txt というファイルが作れます。 次に、各マシンから上記のバッチファイルで作成されたファイルを特定のフォルダに集めて、そのフォルダでコマンドラインから copy *.txt machines.csv を実行すると、machines.csv というファイルがそのフォルダに作成されます。 それを Excel で開けば添付画像のような表が出来ているはずです。 # 実は Excel を持っていないので添付画像は OpenOffice Calc のものですが、 # そのとき「テキストのインポート」というタイトルのダイアログが表示されました。 # Excel でも同様のダイアログが開くかもしれませんが、そのまま OK を押せば問題ありません。 上記で「特定のフォルダに集めて」と書きましたが、あなたのマシンの集計用フォルダを共有フォルダにして、上掲のバッチファイルの最後にネットワーク越しの集計フォルダへのコピー処理を追記すれば集める部分も自動かできます。 ……が、utakataXEX さんが最後におっしゃったとおり、これ以上複雑になるならバッチファイルは力不足になると思われます。 自分だったら Windows Script Host で VBScript か JavaScript を使います。
その他の回答 (2)
- utakataXEX
- ベストアンサー率69% (711/1018)
特に複雑な処理もなく可能だと思います。 一点気になるところとして、職場のPCのCOMPUTERNAMEは全て同じ長さでしょうか? 違うものが含まれるのであれば、0000 は後ろではなく、頭に持ってきた方がいいと思います。 以下、例ですが、「(office2007の文字列)」の意味がわからなかったので、単純に「それぞれのファイル/フォルダの有無」のみ確認しています。 ここから ↓↓↓↓↓↓↓↓↓↓ @echo off set exist_list=- if exist "C:\TEMP\sample.txt" ( set exist_list=%exist_list%1 ) else ( set exist_list=%exist_list%0 ) if exist "C:\TEMP\softcheck.txt" ( set exist_list=%exist_list%1 ) else ( set exist_list=%exist_list%0 ) if exist "C:\Program Files\Hidemaru" ( set exist_list=%exist_list%1 ) else ( set exist_list=%exist_list%0 ) if exist "C:\Program Files\Windows Media Player" ( set exist_list=%exist_list%1 ) else ( set exist_list=%exist_list%0 ) type nul>%COMPUTERNAME%%exist_list%.txt ↑↑↑↑↑↑↑↑↑↑ ここまで こんな感じで、ご質問の内容については実装できます。 ただ、これだと確認事項が増える度にスクリプトを改修しないといけないので、行く行くはAccessか何かにした方がいいと思います。
補足
レス感謝です。 >違うものが含まれるのであれば、0000 は後ろではなく、頭に持ってきた方がいいと思います 先頭にコードを持ってくるとエクスプローラーで表示するときちょとわかりずらくなるので 後半に持ってきたいと考えています。 また、Accessで管理はしていましたが、使いこなせる人がおらずフォームとか入力しやすいですが Office2007PROのライセンスが必要なため断念しEXCELと何かを組み合わせて 管理できないかと苦戦中です。
- hitomura
- ベストアンサー率48% (325/664)
すみません、まず確認したいのですが、あなたが本当にしたいのは 「管理しているコンピューターそれぞれに対して、指定のファイル(複数)が存在するかを調べ、それを集計したい」 のように見えるのですが、間違いありませんか(ひょっとしたら「指定のプログラムがインストールされているか」かもしれませんが)? また、チェックを行うコンピューターの Windows(ですよね?) のバージョンは何がありますでしょうか? それから、上記を実行するにあたっての環境上の制約は (1) バッチファイル以外のものは厳禁 (2) 各コンピュータへの新たなプログラムのインストールはできないが、その条件で使用できるものは使用してもよい (3) 各コンピュータに新たなプログラムのインストールをしてもよい のいずれでしょうか?
補足
レス感謝です。記載いただいた制約ですが 1)バッチ以外厳禁ではなく、VBなど勉強不足でバッチがいいかと思ってます。 2+3)新しいプログラムはインストール問題なしです。 管理したいファイル/フォルダはこちらで決まっているので管理対象外は ユーザの使いたい環境で利用させています。 全台Windows機でXP(32bit/64bit)SP2以上です。
補足
レスありがとうございます。 CSVで出力できる機能初めて知りました。 早速職場に行って使ってみたいと思います。