2016-07-08 4 views
0

ネットワーク共有上にバッチファイルがあります。たとえば、\ Sids \ Awesome \ Network \ Share.batです。私はこのバットファイルのコピーを複数のコンピュータに持っています。ネットワーク共有上でShare.batを更新できるようにファイルを設定したいのですが、ローカルマシン上でShare.batを実行すると、ネットワーク共有のコピーの最終更新時刻を確認できます。それを自己更新してください。これを行う方法に関する提案はありますか?ネットワーク共有内のファイルの最終更新タイムスタンプに基づいてバッチファイルを更新

すべての検索結果は、何らかの種類のディレクトリリストを作成し、そのファイルを選択することにつながっています。残念ながら、これはネットワーク共有では不可能です。今のところ、スクリプト内から呼び出されるC#で小さなアプリを書くことで回避策があります。アプリが必要とするアップデートを信じている場合は、エラーで終了し、アプリがエラーコードで終了した場合はスクリプトを更新します。この依存関係を削除したいと思います。

答えて

0

ハードコードバージョン番号(2行目)。サーバーのバージョンとローカルのバージョンを取得して比較します。バージョン番号が異なる場合は、サーバーからファイルをコピーして再起動します。

@echo off 
REM version=5.1 
for /f "tokens=2 delims==" %%a in ('findstr /b /c:"REM version=" "\\Sids\Awesome\Network\%~nx0"') do set sv=%%a 
for /f "tokens=2 delims==" %%a in ('findstr /b /c:"REM version=" "%~f0"') do set lv=%%a 
echo Server: %sv% 
echo Local: %lv% 
if "%sv%" == "%lv%" goto :continue 
echo updating... 
(xcopy /y "\\Sids\Awesome\Network\%~nx0" >nul || goto :eof) & "%~f0" 
[should never arive at this line] 
:continue 
echo current version. 

あなたは「1つのファイル(複数可)コピーされた」というメッセージを表示したい場合は、>nulを省略することができます。

+0

'REM'と' version = '...という2つの検索文字列を持たないために' findstr'の検索文字列の前に '/ C:'を置く必要があるかもしれません。 – aschipfl

+0

'might'という単語を省略できます - 'findstr'に切り替えたときに'/b'が必要で気付き、 '/ c'を忘れてしまうまで、' find'を使って作業しました。 (これはコード内の唯一の 'REM'行だったので、うまくいきました) – Stephan

関連する問題