windows cmd批次
我有一个看起来像这样的文本文件:
Dog
Cat
Frog
Bat
Bird
Mouse
我想将一个数字归于每个字符串,每行。
这样就变成了
1 Dog
2 Cat
3 Frog
4 Bat
5 Bird
6 Mouse
然后我想让用户输入一个数字,然后将相应的字符串存储在变量中。
因此,如果用户输入1,则变量设置为字符串Dog
因此,当用户输入1时,程序存储/输出Dog
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。
通过小调整来按字符串
询问文件夹这提供了一种更简单的方法来使用CMD的Megatools
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
的输出如下所示:
星号是文件的唯一链接ID
/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窗口中输入长链接ID。
答案 0 :(得分:1)
只需使用数组:
@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
有关详细信息,请参阅this answer。
答案 1 :(得分:1)
直接使用兆字节输出并避免delayedexpansion(删除!
)
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%]%%
使用带有双倍百分号的(伪)调用是一种老式的实现延迟扩展的方法,而!
没有问题。
在编程/脚本编写中,您需要调整技术以满足您的需求。
在不知道您的megatools的确切输出的情况下,
这可以做到这一点:
@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%
根据公司建议,请edit您的问题包含所有必要信息 - 不要强迫他人从不必要的答案和评论中收集信息。
答案 2 :(得分:0)
如何将命令输出到列表中,而不是将文本文件输出到列表中?
所以这里带有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!
所有megalinks都以#!开头!
答案 3 :(得分:0)
这不起作用
我需要输出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