Создать нумерованный список на основе заданного списка строк
Windows CMD пакетная
У меня есть текстовый файл, который выглядит так:
Dog
Cat
Frog
Bat
Bird
Mouse
Я хочу приписать число каждой строке, каждой строке.
Так что становится
1 Dog
2 Cat
3 Frog
4 Bat
5 Bird
6 Mouse
Затем я хочу попросить пользователя ввести число, а затем сохранить соответствующую строку в переменной.
Так что, если пользователь вводит 1, то переменная устанавливается в строку Dog
Поэтому, когда пользователь вводит 1, программа сохраняет / выводит собаку
set /p var1="number? "
так что var1 становится строкой, а не числом.
Это делает первую часть задачи вроде как, но теперь мне нужна вторая часть, хранящая строки в переменной.
@echo off
set TEXT_T="list.txt"
set /a c=0
setlocal ENABLEDELAYEDEXPANSION
FOR /F "tokens=1 usebackq" %%i in (%TEXT_T%) do (
set /a c=c+1
echo !c! %%i
)
endlocal
pause
Здесь ниже обновленный ответ, благодаря LotPings.
С небольшим твиком попросить папку за строкой
Это обеспечивает более простой способ использования Megatools от CMD
https://megatools.megous.com/man/megals.html
https://github.com/megous/megatools
@echo off
:start:
megals /Root/
set /p var1="dir? " & megals /Root/%%var1%%
for /f "tokens=1,* delims=:" %%A in ('megals -n /Root/%%var1%% ^|findstr
/n "." ') do (
set Link[%%A]=%%B
Echo %%A %%B
)
for /f "tokens=1,* delims=:" %%A in ('megals -n -e /Root/%%var1%% ^|findstr
/n "." ') do (
set Link[%%A]=%%B
)
set /p choice=Select #:
Call Set Link=%%Link[%choice%]%%
set "trimmedlink="
for %%h in (%Link%) do if not defined trimmedlink set "trimmedlink=%%h"
Megadl %trimmedlink% && goto :start:
pause
Изменить: пришлось обрезать %Link%
только первое слово, т.е. просто ссылка
Выход из Megals -e /Root/misc
выглядит следующим образом: звездочка - это уникальные идентификаторы ссылок для файлов
/Root/misc
https://mega.nz/#!********!********************* /Root/misc/File1
https://mega.nz/#!********!********************* /Root/misc/File2
https://mega.nz/#!********!********************* /Root/misc/File3
С пакетным скриптом выше это выглядит так:
1 File1
2 File2
3 File3
Select #: <------input file number
Исправлен листинг номера Edit2
Edit3 круглые скобки в именах файлов приводят к сбою программы, т.е.
1 File(1)
Выбранный номер файла затем передается Magadl
как соответствующая ссылка Megadl Link
Пакетный скрипт позволяет загрузить ссылку, просто введя соответствующий номер файла, чтобы вам не приходилось вводить длинный идентификатор ссылки в стандартном окне cmd.
4 ответа
Использовать вывод мегалов напрямую и избегать задержки (что убирает !
)
Findstr / n выполнит нумерацию.
@echo off
for /f "tokens=1,* delims=:" %%A in ('megals -e /Root/ ^|findstr /n "." ') do (
set Item[%%A]=%%B
Echo %%A %%B
)
set /p choice=Select #:
Call Echo Choice:%%Item[%choice%]%%
Использование (псевдо) вызова с удвоенными знаками процента является старомодным методом реализации отложенного расширения без проблем с !
,
В программировании / написании сценариев вы должны адаптировать методы к вашим потребностям.
Не зная точного выхода ваших мегатул,
это может сделать работу:
@echo off
for /f "tokens=1,* delims=:" %%A in ('megals -e /Root/ ^|findstr /n "." ') do (
set Folder[%%A]=%%B
Echo %%A %%B
)
set /p choice=Select #:
Call Set Folder=%%Folder[%choice%]%%
for /f "tokens=1,* delims=:" %%A in ('megals -e %Folder% ^|findstr /n "." ') do (
set Link[%%A]=%%B
Echo %%A %%B
)
set /p choice=Select #:
Call Set Link=%%Link[%choice%]%%
megadl %Link%
В соответствии с рекомендациями compo, пожалуйста, отредактируйте свой вопрос, чтобы он содержал всю необходимую информацию - не заставляйте других собирать его из ненужных ответов и комментариев.
Just use an array:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set TEXT_T="list.txt"
set /a c=0
FOR /F "tokens=1 usebackq" %%i in (%TEXT_T%) do (
set /a c=c+1
echo !c! %%i
set string[!c!]=%%i
)
set /P number=Enter number:
echo !string[%number%]!
pause
Для получения дополнительной информации см. Этот ответ.
Это не сработало
Мне нужен вывод Call Echo %%Item[%choice%]%%, переданного в Megadl
@echo off
for /f "tokens=1,* delims=:" %%A in ('megals -e /Root/anime ^|findstr /n "." ') do (
set Item[%%A]=%%B
Echo %%A %%B
)
set /p choice=Select #:
Call Echo %%Item[%choice%]%%
for /F "tokens=*" (`%%Item[%choice%]%%`) do (
set "var1=%%A"
Megadl !Var1!
)
pause
Как насчет преобразования команды в список вместо текстового файла в список?
поэтому строка с var1 здесь будет превращена в нумерованный список (файлы, перечисленные в этом каталоге), а Var2 - это число, которое вводят пользователи, чтобы создать возвращенную строку, которая передается команде. т.е.
https://megatools.megous.com/man/megals.html
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
(megals -e /Root/) <--------list all folders in root
(set /p var1="dir? " && megals -e /Root/!var1!) <-- select folder + list files
(set /p var2="Megalink? " && Megadl !var2!) <--- enter the file name for download
ENDLOCAL
pause
Я хочу иметь возможность ввести номер для загрузки вместо длинного имени файла. Таким образом, пользователь может ввести номер, соответствующий ссылке, которую он хочет скачать. Так что, если они вводят 1, то программа делает Megadl Dog
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
megals -e /Root/
set /p var1="dir? "
megals -e /Root/!var1! > rlist.txt
set TEXT_T="rlist.txt"
set /a c=0
FOR /F "tokens=1 usebackq" %%i in (%TEXT_T%) do (
set /a c=c+1
echo !c! %%i
set string[!c!]=%%i
)
set /P number=Enter number:
Megadl !string[%number%]!
Endlocal
pause
Это убивает первую часть ссылки, поскольку удаляет все, что находится между ними, включая восклицательные знаки.! Dasasdasd!
все мегалинки начинаются с #! чего-то!