2017-02-22 10 views
0

Я пишу простой командный файл для создания новых, определяемых пользователем файлов. Мой вопрос заключается в том, как принимать входные данные для расширения с периодом или без него и не давать двупериодный (то есть имя1..txt). Я также хочу, чтобы не печатать инструкции, чтобы они включали/не включали его. Спасибо за помощь!Как основать условные утверждения о существовании переменной substring

Мой подход ниже. Я хочу найти период в начале переменной расширения, ext и запустить соответствующий цикл FOR для создания файлов.

setlocal enabledelayedexpansion 
set num= 
set name= 
set ext= 

:setnum 
set /P "num=Number of files to create?: " 
If not defined num Echo.&Echo You must enter a number to continue...&goto:setnum 

:setname 
set /P "name=Enter "root" name of file:" 
If not defined name echo.&Echo You must enter the name of your new files to continue...&goto:setname 

:setext 
set /P "ext=What will be the file extension?:" 
If not defined ext echo.&Echo You must enter an extension to continue...&goto:setext 

pause 
%ext:~0,1% | FINDSTR /R "[.]" && pause & goto:extNoDot 
%ext:~0,1% | FINDSTR /R "[.]" || pause & goto:extYesDot 

:extNoDot 
for /L %%a in (1,1,%num%) do (echo %%a >> !name!%%a%ext%) 
goto:eof 

:extYesdot 
for /L %%a in (1,1,%num%) do (echo %%a >> !name!%%a.%ext%) 
goto:eof 

:eof 
EXIT /b 

ответ

1

Вы не указали, что не так с вашим текущим кодом. Без тестирования, я могу видеть, что эти две линии должны давать вам проблемы:

%ext:~0,1% | FINDSTR /R "[.]" && pause & goto:extNoDot 
%ext:~0,1% | FINDSTR /R "[.]" || pause & goto:extYesDot 

Это потому, что у вас есть %ext:~0,1% в начале строки, как если бы это была команда. То, что вы пытаетесь сделать, это передать их команде FINDSTR. Поэтому вам необходимо их откликнуться:

echo %ext:~0,1% | FINDSTR /R "[.]" && pause & goto:extNoDot 
echo %ext:~0,1% | FINDSTR /R "[.]" || pause & goto:extYesDot 

Однако, используя внешнюю команду здесь, перебор. Вы должны сделать следующее вместо:

rem Remove any optional dot at the start 
if "%ext:~0,1%" == "." set "ext=%ext:~1%" 

А потом просто продолжать, как будто ext никогда не имел точку в первую очередь (нет необходимости в отдельных nodot и yesdot этикетки).

+0

Спасибо тонну! Такое более элегантное решение. И спасибо за разъяснение двух строк findstr. Я не понимал, что нужно эхо. Спас меня! – Glycoversi

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