编号变量,找到有效路径时

时间:2017-08-28 14:42:33

标签: windows batch-file

也许我没有给它一个好头衔,无论如何

您好,

我批量编写了一些脚本,需要帮助。

FOR我检查所有可能的驱动器字母AZ,当其中一些驱动器将被找到X:\Users\Public\Desktop时,请将此信件保存到带编号的变量1_windrive2_windrive3_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:\Users\Public\Desktop (
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:\Users\Public\Desktop (
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

1 个答案:

答案 0 :(得分:1)

set windrive_!number!=%%p
CALL echo %%windrive_!number!%%
set /a number=number+1

列出windrive变量集的简便方法是

set windrive

正如软弱所说,用数字开始变量可能会导致cmd句法中风。

%var%表示“代码块启动时var的值”,因此随着循环的进行它将保持不变。 !var!表示在循环中更改的值。

set/a不需要

引号,%!都不需要引号 - 变量名本身就是“变量的运行时值”(即随着变化而变化)在循环中)这是无论是否已调用enabledelayedexpansion

[编辑 - 在echo循环中修复for