0

Я установил переменную системной среды, называемую find, которая указывает на пакетный скрипт. Я сделал это, чтобы в командной строке Win я мог набрать% find% и выполнить мой скрипт. Он работает только с проблемой: он работает только один раз, мой сценарий принимает параметр или требует ввода пользователя (попробовал оба), а затем он выглядит так, как будто% find% временно перезаписывается, а% find%, конечно, больше не работает , пока я не открою окно команд. В принципе, он работает один раз и все!Выполнение пакетного сценария из среды Переменная

Как я могу заставить его работать каждый раз? Я хочу выполнить мой скрипт, используя переменную среды снова и снова, без перезагрузки командного окна.

Спасибо.

ответ

0

Я создал пакетный скрипт со следующим кодом:

@ECHO off 
echo hello 

и добавил переменную окружения с именем TEST, который указывает на сценарий. У меня нет проблем с выполнением сценария с использованием переменной окружения несколько раз.

Можете ли вы предоставить информацию или код, что делает ваш скрипт?

+0

Он работает найти в первый раз, а затем, когда я запустить его снова, я получаю «„% найти%“не распознается как внутренней или внешней командой, исполняемой программой или пакетным файлом.». Кроме того, сценарий похож на скрипт linux grep с помощью findstr. –

+1

Ответьте на Peters, хотя я также попытался переименовать свою переменную окружения в «find», и он все еще работает. Разумеется, переименуйте его в нечто вроде «find2». –

+0

Спасибо, ребята, я знаю, в чем проблема, переменная окружения была с тем же именем, что и командный файл, с разными именами, которые он теперь работает все время: D У меня была эта проблема раньше в немного другом случае и должна была быть реализована , Благодаря!! –

0

Напомним, что find является МС-поставляется утилита.

Попробуйте использовать другое название. И покажите нам свою партию - даже, возможно, расскажите, что происходит, когда она «больше не работает». Игры из 20 вопросов утомительны.

0

Проблема заключается в том, что пакетный скрипт использует переменный с тем же именем, поэтому после его запуска в первый раз переменное значение не перезаписывается и больше не работает. Чтобы этого не произошло, вставьте команду setlocal в начале Batch-файла; таким образом, когда скрипт заканчивается, все переменные сбрасываются до значений, которые они имели до запуска скрипта. Этот метод также удаляет все новые переменные, определенные в Batch-скрипте, поэтому он сохраняет среду чистой.

+0

В сочетании с этим было бы неплохо добавить 'endlocal' в конец скрипта (чтобы восстановить переменные среды в их предыдущем состоянии). –

+1

@SethMcCauley: Справка для команды 'setlocal /?' Указывает: «Когда конец пакетного скрипта достигнут, подразумевается ENDLOCAL для любых выдающихся команд SETLOCAL, выпущенных этим пакетным скриптом». – Aacini

+0

Спасибо, я не понял, что ... хорошо знать! –

0

Если вы намерены переопределить поведение существующей утилиты find.exe, вы можете добавить местоположение сценария в переменную глобального пути перед вашей папкой System32 (где находится find.exe). Например, предположим, что ваш скрипт C:\Scripts\find.bat. Если ваша переменная путь в настоящее время устанавливается на это:

%SystemRoot%\system32;%SystemRoot% 

... тогда вы бы изменить его к этому:

C:\Scripts;%SystemRoot%\system32;%SystemRoot% 

Берегитесь, хотя ... делает это может нарушить работу других скриптов, использующих находку (если они не используют абсолютный путь к find.exe).

Если вам просто нужен простой способ запуска вашей альтернативной команды find, вы можете просто назвать ее другим именем, как предложили другие, затем добавить ее в конец пути или поместить в папку System32. Это избавит вас от необходимости вводить знаки процента.

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