Запретить перезапись файла с помощью cmd, если он существует - PullRequest
35 голосов
/ 21 июля 2011

В настоящее время я пишу батный файл .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 командой или одним из ее параметров.

Большое спасибо, ребята!

Ответы [ 3 ]

44 голосов
/ 21 июля 2011

Используйте полный путь к папке в вашем коде If Not Exist. Тогда вам даже больше не придется записывать CD:

If Not Exist "C:\Documents and Settings\John\Start Menu\Programs\SoftWareFolder\"
3 голосов
/ 15 апреля 2017

Как и в ответе 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 голосов
/ 28 июля 2013

Я заметил некоторые проблемы с этим, которые могут быть полезны для кого-то, кто только начинает, или несколько неопытного пользователя, чтобы знать.Во-первых ...

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

две вещи во-первых, что / D после CD может оказаться полезным для проверки того, что каталог изменен, но это не является действительно необходимым, во-вторых, если вы собираетесь пройтиэто от пользователя к пользователю, вы должны добавить вместо вашего имени код% username%, это делает код пригодным для использования на любом компьютере, если у вас есть файл setup.exe в том же месте, что и на вашем компьютере,конечно, убедиться в этом сложнее.также ...

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

код запуска здесь, может быть настроен так, но правильный синтаксис:

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

Это запустит: setup.exe, расположенный в:\ фильтр \ репо \ лаборатории ... и т.д. \

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...