web-dev-qa-db-ja.com

存在する場合、cmdを使用してファイルを上書きしないようにします

現在、インストールファイルを実行する.batバッチファイルを作成しています。インストールファイルを実行する前に、アプリケーションの再インストールを回避するために、ディレクトリが存在するかどうかを確認します。

これを行うには、If Not Exist filenameステートメントを使用します。インストールしたファイルが存在しない場合は、インストールファイルを実行します。

何らかの理由で、既にインストールされているアプリケーションでテストすると、まだその上にアプリケーションを再インストールしようとしています。

ここに私のコードのスニペットがあります:

cd "C:\Documents and Settings\John\Start Menu\Programs\"
pause
If NOT exist "Software Folder"\ (
 start \\filer\repo\lab\"software"\"myapp"\setup.exe
 pause
) 

SoftwareFolder"C:\Documents and Settings\John\Start Menu\Programs\".のサブディレクトリです。Programsフォルダーに存在するかどうかを確認しています。

startコマンドには何も問題がないことを知っています。最初のCDコマンドまたはそのパラメーターの1つで何かがおかしいと感じています。

どうもありがとう!

35
Johnrad

If Not Existコードでフォルダーへのフルパスを使用します。そうすれば、もうCDを作成する必要さえなくなります。

If Not Exist "C:\Documents and Settings\John\Start Menu\Programs\SoftWareFolder\"
44
Jimmy D

Escobar Ceaserの答えのように、パス全体で引用符を使用することをお勧めします。これは、パス内の個別のディレクトリ名だけでなく、パス全体を ""でラップする一般的な方法です。

私にはうまくいかないという同様の問題がありました。しかし、パスには複数のディレクトリ階層をカバーする環境変数が含まれていたため、個別のディレクトリ名のパス内で「」を使用するオプションはありませんでした。結論は、「」と「(

ブラケットの前にスペースがある正しいバージョンは

If NOT exist "C:\Documents and Settings\John\Start Menu\Programs\Software Folder" (
 start "\\filer\repo\lab\software\myapp\setup.exe"
 pause
) 
3

これに関するいくつかの問題に気づきました。これは、始めたばかりの人や、やや経験の浅いユーザーが知るのに役立つかもしれません。最初...

CD /D "C:\Documents and Settings\%username%\Start Menu\Programs\"

2つの理由の1つは、CDの後の/ Dがディレクトリの変更を確認するのに役立つことが証明されることです。しかし、これは本当に必要ではありません。 name、コード%username%、これは、コンピューターで実行するのと同じ場所にsetup.exeファイルがある限り、どのコンピューターでもコードを使用できるようにします。もちろん、それを確認することはより困難です。また...

start \\filer\repo\lab\"software"\"myapp"\setup.exe

ここの開始コードは、そのように設定できますが、正しい構文は

start "\\filter\repo\lab\software\myapp\" setup.exe

これにより、次が実行されます:\ filter\repo\lab ... etc. \にあるsetup.exe

3
Noah Puckett