2015-09-22 3 views
1

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

До сих пор мой способ сделать это - иметь, если команды проверяют каждую возможную комбинацию 1-5 до 5 цифр. Сначала он переходит к первому числу в последовательности, затем переходит ко второму, так далее и так далее, пока не достигнет количества введенных чисел, после чего он выйдет.

Например: Если бы я хотел номер 324.

@echo off 
echo What do you want to back up? 
set /P a="" 
:OptionSet1 
set b=a 
*all other numbers* 
if /I "%a%" equ "324" goto 3 
:OptionSet2 
set b=b 
*all other numbers* 
if /I "%a%" equ "324" goto 2 
:OptionSet3 
set b=c 
*all other numbers* 
if /I "%a%" equ "324" goto 4 
:Exit 
exit 
:2 
echo Now I'm running 2 
if /I "%b%" equ "a" goto OptionSet2 
if /I "%b%" equ "b" goto OptionSet3 
if /I "%b%" equ "e" goto Exit 
:3 
echo Now I'm running 3 
if /I "%b%" equ "a" goto OptionSet2 
if /I "%b%" equ "b" goto OptionSet3 
if /I "%b%" equ "e" goto Exit 
:4 
echo Now I'm running 4 
if /I "%b%" equ "a" goto OptionSet2 
if /I "%b%" equ "b" goto OptionSet3 
if /I "%b%" equ "e" goto Exit 

Так что мне было интересно: есть ли способ, чтобы пользовательский ввод, и читать то, что они набрали по буквам затем действовать в соответствии с тем, что письмо было?

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

Любая помощь будет принята с благодарностью, но имейте в виду, что я очень новичок в этом, поэтому, пожалуйста, подробно объясните, что происходит.

ответ

0

Mid Строка - Извлечение подстроки по позиции

Описание: Подобно функции Mid в VB пакетный сценарий может возвращать указанное количество символов из любой позиции внутри строки, указав подстроку для расширения заданную позицию и длину, используя: ~ при расширении переменной содержимого. Пример здесь показывает, как извлекать части даты.

Сценарий:

echo.Date : %date% 
echo.Weekday: %date:~0,3% 
echo.Month : %date:~4,2% 
echo.Day : %date:~7,2% 
echo.Year : %date:~10,4% 

Выход:

Date : Sat 03/11/2006 
Weekday: Sat 
Month : 03 
Day : 11 
Year : 2006 

Взятые из http://www.dostips.com/DtTipsStringManipulation.php#Snippets.MidString

+0

Так как числа соответствуют положению? Является первым номером, с которого нужно начинать, и вторым количеством символов вправо? –

+0

Да, и первый символ начинается с позиции 0. – StillLearnin

0

Вы можете также использовать пробелы как "количество сепаратора обеспечивают" и передать всю строку в другой пакетный файл (или , в этом случае сам, позволяя ему использовать рекурсию):

@echo off 
set argstring=%* 
if "%argstring%" EQU "" goto :EOF 

set thisarg=%1 
REM do stuff with thisarg here 
echo.thisarg 


set argstring=%argstring:* =% 
call thisfile.bat argstring 
goto :EOF 

запустить этот файл из командной строки с помощью call thisfile.bat 3 4 5 1 9 и отзовется

3 
4 
5 
1 
9 

(рекурсии так приятно)

надеюсь, что это помогло

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