以下从远程目录创建一个编号的链接列表,例如
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
第一个问题:所有链接都包含一个!
字符,该字符被延迟扩展删除,使链接无用。链接需要 ,!
因为它是链接的一部分。
第二个问题:我正在尝试将其集成到程序中,但我无法使用findstr
,因为它会在同一行列出链接和文件名,并且当文件名包含括号时程序崩溃。所以我必须使用 usebackq 因为它让我只获得链接,而不需要处理文件名。
Findstr
将列出Link!1 Filename
(整行)
Usebackq
让我得到Link!1
我不能使用Findstr
,因为当文件名包含括号时程序会崩溃,这只能通过延迟扩展来解决。
这是来自这里的后续帖子,我被卡住了:(显示程序)
https://stackoverflow.com/questions/49564553/create-a-numbered-list-based-on-a-given-list -of-strings# =
您可以在那里看到 findstr 方法,以及当文件名包含括号时它如何导致崩溃,这可以通过延迟扩展来修复,但这会删除!
必不可少的字符,因为它是链接的一部分。
编辑:现在似乎可以工作了,谢谢
工作代码
@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