2015-02-06 3 views
0

У меня есть пакетный скрипт, который я запускаю из одной папки, которая вызывает исполняемый файл .NET в другой папке, а затем передает в нее параметры папки, которые существуют в другой папке. Это выглядит так:windows batch script указывает на правильный путь

SET start_dir=%cd% 
cd.. 
cd apps 
SET apps_dir=%cd% 
SET my_dir=%apps_dir%\MY_DIR 

cd C:\projects\ConsoleApplication1\src\ConsoleApplication1\bin\Debug 

ConsoleApplication1.exe -i -f %my_dir% 

cd %start_dir% 

Это правильный способ передать каталог в приложение в пакетном скрипте? Мое приложение, похоже, не может найти каталог, и я не знал, есть ли способ устранить эти вещи в скрипте или если это правильный способ или нет, так как я впервые сделал оконный пакетный сценарий. Благодаря!

ответ

0

Должно быть, но пакет чувствителен к пробелам в заявлении SET. SET FLAG = N устанавливает переменную с именем «ФЛАГ Космический» на значение «Space

Синтаксис SET "var=value" (где значение может быть пустым) используется, чтобы гарантировать, что любые паразитные завершающих пробелов не включены в стоимость назначены. set /a можно безопасно использовать «quoteless».

Это важно, когда есть пробелы в именах файлов или каталогов.

Я хотел бы предложить некоторые незначительные изменения:

@echo off 
setlocal 
SET "start_dir=%cd%" 
cd .. 
cd apps 
SET "apps_dir=%cd%" 
SET "my_dir=%apps_dir%\MY_DIR" 

cd "C:\projects\ConsoleApplication1\src\ConsoleApplication1\bin\Debug" 

ConsoleApplication1.exe -i -f "%my_dir%" 

cd "%start_dir%" 

отмечая

  • @echo от отключает командной вторя на протяжении всей партии

  • SETLOCAL обеспечивает любую среду сделанные изменения устраняются, когда партия заканчивается, поэтому вы не получаете проблем с устаревшими данными из изменений, сделанных в результате предыдущих запусков

  • кд «destinationdir» - кавычки не обычно требуется, даже с «пробелами в имени пути», но может потребоваться для странных имен путей (например, те, которые содержат &)

  • «% my_dir%» в качестве аргумента для ConsoleApplication1, чтобы гарантировать, что это рассматривается как один лексем

  • если consoleapplication1.exe находится в каталоге на пути, то нет никакой необходимости cd в этой директории; команда consoleapplication1 .... получит к ней доступ. Естественно, если приложение снабжено неквалифицированным именем файла, то он будет считать, что файл находится в директории current, а не директория executable «s, так что может быть необходимо для переключения директорий ...

  • если consoleapplication1.exe находится в каталоге, который не находится на пути, а затем "C:\projects\ConsoleApplication1\src\ConsoleApplication1\bin\Debug\consoleapplication1" .... получит к нему доступ. Кавычки безвредны, если они включены, но требуются в случае пробелов в full-executablename.

  • path из приглашения покажет путь выполнения; каждый каталог разделяется точкой с запятой.

  • это можно использовать

@echo off 
setlocal 
SET "start_dir=%cd%" 
pushd ..\apps 
SET "apps_dir=%cd%" 
SET "my_dir=%apps_dir%\MY_DIR" 
pushd "C:\projects\ConsoleApplication1\src\ConsoleApplication1\bin\Debug" 

ConsoleApplication1.exe -i -f "%my_dir%" 
popd 
popd 

где pushd изменения в указанный каталог назначения в настоящее время сохраняется на простой стек. popd выводит каталоги обратно из стека.

Смежные вопросы