#windows #batch-file #buffer #dos
#Windows #пакетный файл #буфер #dos
Вопрос:
Я создал простой пакетный скрипт для создания структуры папок CodeIgniter (строительные леса), но… скрипт запоминает последнее значение переменной среды %1, поскольку существует буфер клавиатуры. Любое простое решение? Я использую Windows 7
@echo off
REM by Pablo Bozzolo (2011)
REM HOW to empty keyboard buffer before ???
if "%1"=="" goto inicio
set (%uname%)=(%1)
goto creacion
:inicio
set /P uname=Nombre del modulo ?
if "%uname%"=="" goto inicio
echo Desea crear el modulo %uname%
choice
if errorlevel 2 goto end
:creacion
mkdir %uname%
cd %uname%
mkdir config
mkdir controller
mkdir libraries
mkdir models
mkdir views
type NUL > ./controller/%uname%.php
type NUL > ./models/%uname%_m.php
cd..
echo Modulo %uname% creado!
goto end
:end
Комментарии:
1. Как вы пришли к такому выводу? %1 является первым аргументом командной строки для скрипта. Это не имеет ничего общего с буфером клавиатуры.
2. Я также думаю, что он неправильно понимает использование %1, но смотрит на то, что делает скрипт. Я думаю, он хочет иметь возможность что-то делать, если %1 не передается скрипту.
3. Привет!!! моя идея заключается в том, что этот скрипт можно использовать из командной строки, а также как программу Windows… вот так…. Я тоже использую %1 — J. Kommer: спасибо за редактирование :))
4. Я полагаю, у вас есть более простые проблемы, чем очистить буфер клавиатуры…
set (%uname%)=(%1)
никогда не может работать, это создаст, вероятно, переменную()
с именем, содержимое%1
которой заключено в квадратные скобки — если%1
hello
тогда у вас есть()=(hello)
5. может ли быть так, что реальный вопрос заключается в том, чтобы очистить буфер клавиатуры перед SET / P ? пожалуйста, не делайте этого, это нарушило бы консолидированные ожидания пользователей в средах Windows.
Ответ №1:
Если вы хотите обработать %1, если он пуст, просто напишите
if "%~1" LEQ "" set uname=%1
Комментарии:
1. Пустой тест user980631, похоже, работает, но
set (%uname%)=(%1)
является синтаксическим мусором2. Верно. Просто следуя его коду. Однако это не единственная проблема:
type NUL > ./controller/%uname%.php
это тоже вызовет проблемы. Или не конкретно проблемы, но это синтаксический мусор, как вы говорите 🙂