質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Q&A

解決済

4回答

7120閲覧

コマンドプロンプト ファイル存在チェック&比較

coko1

総合スコア276

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

0グッド

0クリップ

投稿2016/09/09 03:28

編集2016/09/09 03:36

コマンドプロンプトでテキストファイル等を読み込み、ファイルの存在確認、存在した場合サイズとタイムスタンプでの比較を行いたいのですが可能でしょうか?
また、比較を行いたいファイルがサーバー側(windowsまたはlinux)にあることを想定しています。

テキストファイル内容
.パス/ファイル名
・サイズ
・タイムスタンプ

説明不足は指摘してくだされば、随時補足していきます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mit0223

2016/09/09 05:02

そういうプログラムを作成すればよいかと思いますが、どのような回答を期待されていますか?
coko1

2016/09/09 05:21

ファイルを読み込んで、サーバーに接続し存在確認&比較を行いその結果(一致or不一致)を表示させるにはどういうプログラムを組めばいいのかを求めています。
mit0223

2016/09/09 05:38

私も新参者で teratail のルールをあまり知らないのですが、たしか質問でプログラムのソースコードをまるごと求めてはいけないことになっていたように思います。どんな処理系を使えばよいか?とか、サーバとの通信はどうしたらよいか?とか、ファイルのサイズを取得するのはどうしたら良いか?とか、質問を分解されてはいかがでしょうか。
coko1

2016/09/09 05:57

サーバーへの接続(linux&windows)の行い方、接続後のファイルの存在チェックのやり方を知りたいです。
mit0223

2016/09/09 06:20

いろいろ、手段がありすぎて、提案しにくいです。後一つだけ、質問させてください。何かシステムの一部を開発されているのでしょうか(つまり、一般の利用者も利用するようなものでしょうか)?それとも自分とせいぜい同僚が日常業務でたまに使うようなツールを開発されているのでしょうか?
coko1

2016/09/09 06:39

どちらかといえば後者にあたりますかね。
guest

回答4

0

ファイルの存在チェックや比較についてはotnさん、ttyp03さん、mit0223さんの回答の通りでいけると思います。
ただ、質問者さんの想定として、

比較を行いたいファイルがサーバー側(windowsまたはlinux)にあること

とネットワーク越しのアクセスがあります。そのことから、実行環境をコマンドプロンプトよりはPowerShellを使うようにした方がいいと思います。
コマンドプロンプトは「DOS窓」と呼ばれることもあるように、MS-DOSの延長上にあるものです。MS-DOSはその名が示す通り、(動作しているPCの)ディスクにあるファイルを管理対象とします。ネット利用が当たり前となった現在ではネット上のリソースを直接指定してアクセスできるようにはなりましたが、一部のコマンド(例えばcdコマンド)では対応していないものもあります。そのためフルにコマンドプロンプトの機能を使用しようとする場合、(別マシンである)サーバー上にあるファイルにアクセスするためには、その公開ディレクトリを**「ドライブ」**としてマウントしてやる必要があります(使えるようにするためにちょっとした一手間かかるということですね。まあ、これは一度設定してしまえばよいというところもありますが)。
その点、PowerShellは現状に合わせて設計されているだけあって、そういった手間が必要ありません。UNC形式(\<サーバー名><公開ディレクトリ>という形式)でアクセスすることが可能です(つまり、マウントする必要がありません)。また、バッチファイルやWSH、PowerShellスクリプトも使用できます。マイクロソフトとしてもPowerShellは推していますので(ついこの間もオープンソース化しましたし)、コマンドプロンプトから移行しても差し支え無いと思います。
(まあ、PowerShellスクリプトについては習熟コストが掛かってしまいますが)

投稿2016/09/09 14:15

編集2016/09/09 16:01
archiver

総合スコア1557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

様々な手段が考えられますが、自己利用のツールの類ということですので、簡単に実装できる手段を選んだほうが良いでしょう。
サーバへの接続方法は、以前VBAで同様の質問をされていた時にベストアンサーにされていたファイル共有をおすすめします。Linux のサーバに Samba をインストールすれば、Linux にも接続できます。

ファイルの存在チェックは利用する処理系によって、書き方が異なりますが、VBAの時と同じくUNCにパスを結合してアクセスすればよいかと思います。処理系は、ここまでに .bat, wsh が提案されてますが、vbscript というのもあります。好みのものを利用されればよいかと思います。

投稿2016/09/09 07:05

mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

archiver

2016/09/09 13:48

VBScriptはWSHと別物ではなくて、WSHに内包されているものだと思います。WSHで処理を行うためのスクリプト言語の一つという位置づけ。 しかし、質問者さんがやりたいことを実現する手段として、VBScriptは現実解だと思います。
mit0223

2016/09/09 14:00

そうなんですね。ご指摘ありがとうございました。
coko1

2016/09/10 01:56

回答への返答遅れてしまい申し訳ありませんでした。Sambaがインストールされているようなのでそちらの方向で試してみます。
guest

0

可能か否かで言えば可能です。
コマンドプロンプトですと、コマンドを駆使したバッチファイルかWSHが事前準備なく使えます。
バッチファイルは相当癖があるので、WSHの方がいいかもしれません。
VBA感覚で書けると思います。
その他、perlでもPHPでも導入すれば可能ですので、得意言語で実装してください。

投稿2016/09/09 05:08

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coko1

2016/09/09 05:27

私の質問への回答いつもありがとうございます。大変参考にさせてもらっています。 WSHというものがよくわかりません。どういったものでどう使えばよいのでしょうか。 バッチの方であれば簡単なものくらいは作れるのですが…
ttyp03

2016/09/09 05:32

WSHについては(情報は少ないかもしれませんが)調べれば出てきます。 例えばこことか。 http://wsh.style-mods.net/ ファイルの存在チェックのサンプルもありますね。 http://wsh.style-mods.net/tips/wshtips_2-05.htm 多少制限されたVBAのような感じですので、ExcelのVBAとか知ってればそれほど違和感なく使えるかもしれません。
guest

0

ベストアンサー

可能です。詳しくは、for /?およびif /?を参考にしてください。

ファイルの読み込み・・・・for /f
存在確認・・・・ if exist
サイズとタイムスタンプ(分まで)・・・・for /?の末尾参照

投稿2016/09/09 04:59

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coko1

2016/09/09 05:24

サーバー側への存在確認も可能でしょうか?比較するファイルが存在するであろうサーバーが、windowsのサーバーでもlinuxのサーバでも確認できるようにしたいのですが、
otn

2016/09/09 05:50

アクセス可能なら、可能です。ドライブレターを与えても、UNC形式でもどちらでも大丈夫なようです。
coko1

2016/09/09 06:47

サーバーへの接続が可能であればということでしょうか? サーバーへの接続の仕方がいまいちわからないのですが
otn

2016/09/09 09:03 編集

> サーバーへの接続の仕方がいまいちわからないのですが それはWindowsの基本的な使い方の問題ですね。このサイトで質問することの範囲外です。 「ネットワークドライブ」とかで検索すると良いかも。 もしくは、Windowsの入門書をちゃんと読むとか。
archiver

2016/09/09 13:39

>otnさん DOS窓(=コマンドプロンプト)ではUNC形式でパス指定ができないので、ネットワークドライブとしてマウントしてからでないと、ネットワーク越しにはアクセスできませんよ。
otn

2016/09/09 14:54

>DOS窓(=コマンドプロンプト)ではUNC形式でパス指定ができないので、 そんなことはないですよ。(↓Windows7で実行) if exist \\r\Mass-1\ddd.txt date/t 2016/09/09
archiver

2016/09/09 15:01

もしかして、コマンド(例えばcdコマンド)のパラメータとしては使えないってだけですかね。 提示されたもの(もちろん、対象は別ですが)をコマンドラインから実行したら正しく実行されましたね。
otn

2016/09/09 15:06

cd では使えない(カレントディレクトリに出来ない)です。pushd なら使えます(正確には一時的にマウントしてくれる)ので、実害は無いですが。
archiver

2016/09/09 15:16

ですね(まさに、カレントディレクトリにできない旨のメッセージですし)。dirとかも使えますし。たまたま、サポートしていないコマンドの結果で指摘してしまい申し訳ありません(自分とこの回答も修正しないと)。 しかし、pushdがあるなんて初めて知りました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問