也许我并没有给它一个好标题,无论如何
你好
我批量编写了一些脚本,需要帮助。
FOR
我检查所有可能的驱动器号A-Z,当其中一些将找到X:UsersPublicDesktop
,然后将此字母保存到编号的变量1_windrive
,2_windrive
,3_windrive
等。
但是我的代码不起作用,我不知道问题出在哪里。
这是代码:
@echo off
setlocal EnableDelayedExpansion
set number=1
if not defined !number!_windrive (
for %%p in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%p:UsersPublicDesktop (
set !number!_windrive=%%p
echo !number!%_windrive%
set /a "number=%number%+1"
)
pause
解决方案代码:
@echo off
setlocal EnableDelayedExpansion
set number=1
if not defined windrive_!number! (
for %%p in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%p:UsersPublicDesktop (
set windrive_!number!=%%p
CALL echo %%windrive_!number!%%
set /a number=number+1
)
)
echo %windir%
echo %windrive_1%
echo %windrive_2%
echo %windrive_3%
echo %windrive_4%
echo %windrive_5%
pause
set windrive_!number!=%%p
CALL echo %%windrive_!number!%%
set /a number=number+1
列出windrive
变量集的简单方法是
set windrive
正如squishy所说,以数字开头的变量可能会导致cmd
句法中风。
%var%
表示"启动代码块时var
的值",因此随着循环的进行,它将保持不变。!var!
表示在循环中更改的值。
引号对于set/a
都不需要,%
也不是!
- 变量名本身意味着"变量的运行时值"(即当它在循环中发生变化时),这与是否调用enabledelayedexpansion
无关。
[编辑 -for
循环中的固定echo
]