Следующее создает нумерованный список ссылок из удаленного каталога, например
1 Link!1
2 Link!2
3 Link!3
4 Link!4
5 Link!5
.
@echo off
setlocal ENABLEDELAYEDEXPANSION
megals --reload /Root/
set /p var1="enter folder name: " & megals /Root/var1
set /a c=0
FOR /F "tokens=1 usebackq" %%i in (`megals -n -e /Root/%%var1%%`) do (
set /a c=c+1
echo !c! %%i
set string[!c!]=%%i
)
set /P number=Enter number:
echo !string[%number%]!
pause
Первая проблема : Все ссылки содержат символ !
, который удаляется с помощью delayedexpansion, что делает ссылку бесполезной. Для ссылки требуется !
, поскольку она является частью ссылки.
Вторая проблема : я пытаюсь интегрировать это в программу, и я не могу использовать findstr
, потому что он будет содержать ссылку и имя файла в одной строке, и когда имена файлов содержат в скобках программа вылетает. Поэтому я должен использовать usebackq, потому что он позволяет мне получить только ссылку, без необходимости иметь дело с именами файлов.
Findstr
выведет список Link!1 Filename
(вся строка)
Usebackq
Позвольте мне просто получить Link!1
Я не могу использовать Findstr
, потому что, когда имена файлов содержат круглые скобки, программа аварийно завершает работу, что может быть решено только с помощью delayedexpansion.
Это следующий пост, на котором я застрял: ( Показывает программу )
https://stackoverflow.com/questions/49564553/create-a-numbered-list-based-on-a-given-list-of-strings#=
Здесь вы можете увидеть метод findstr и узнать, как он вызывает сбои, когда имена файлов содержат круглые скобки, что можно исправить с помощью delayedexpansion, но при этом удаляется символ !
, который необходим, поскольку он является частью ссылки.
Редактировать: Кажется, теперь работает, спасибо
Рабочий код
@echo off
:start:
megals --reload /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
)
setlocal DisABLEDELAYEDEXPANSION
set /a c=0
FOR /F "tokens=1 usebackq" %%i in (`megals -n -e /Root/%%var1%%`) do (
set /a c+=1
call set "string[%%c%%]=%%i"
)
set /P number="Enter number: "
FOR /F "tokens=*" %%g IN ('call echo %%string[%number%]%%') do (SET VAR2=%%g)
echo %Var2%
echo.
Megadl %VAR2% & echo. && goto :start:
pause
https://megatools.megous.com/man/megals.html#_megatools