Как очистить буфер клавиатуры в пакете DOS?

#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 это тоже вызовет проблемы. Или не конкретно проблемы, но это синтаксический мусор, как вы говорите 🙂