Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 另一个变量中的批处理变量名称_Batch File - Fatal编程技术网

Batch file 另一个变量中的批处理变量名称

Batch file 另一个变量中的批处理变量名称,batch-file,Batch File,假设我有一个文件夹,其中包含我不一定知道的其他文件夹: |Folder | |-- SubFolder1 | |-- SubFolder2 | |-- SubFolder3 我基本上想映射子文件夹的另一个位置。因此,我创建了另一个批处理文件,其中包含这些子文件夹名称,可以为它们设置另一个位置,例如: TYPE NUL > folders.cmd FOR /D %%i IN (*) DO (@ECHO SET %%i=>>folders.cmd)

假设我有一个文件夹,其中包含我不一定知道的其他文件夹:

|Folder
|      |-- SubFolder1
|      |-- SubFolder2
|      |-- SubFolder3
我基本上想映射子文件夹的另一个位置。因此,我创建了另一个批处理文件,其中包含这些子文件夹名称,可以为它们设置另一个位置,例如:

TYPE NUL > folders.cmd
FOR /D %%i IN (*) DO (@ECHO SET %%i=>>folders.cmd)
产生:

SET SubFolder1=
SET SubFolder2=
SET SubFolder3=
然后,如果我打开该文件并设置如下值:

SET SubFolder1=C:\test1
SET SubFolder2=C:\test2
SET SubFolder3=C:\test3
我现在如何访问批处理文件中的变量/值(特别是当我可能不知道它们是什么时)

我想也许我可以做一些类似的事情:

CALL folders.cmd
FOR /D %%i IN (*) DO (
    @ECHO %%%i%%%
)

但这似乎是不正确的做法。

不要将循环变量与环境变量混用,因为它们是两种不同类型的变量

完全不清楚你最终想要实现什么。但对于您的示例,下面的批处理代码生成了您最终想要的
folders.cmd

@ECHO OFF
SETLOCAL EnableDelayedExpansion
DEL folders.cmd 2>nul
FOR /D %%i IN (*) DO (
    SET "FolderName=%%i"
    SET "FolderNumber=!FolderName:~-1!
    ECHO SET "%%i=C:\test!FolderNumber!">>folders.cmd
)
TYPE folders.cmd
ENDLOCAL
PAUSE
输出为:

SET "SubFolder1=C:\test1"
SET "SubFolder2=C:\test2"
SET "SubFolder3=C:\test3"
第二个从当前文件夹名称中获取最后一个字符

或者,对于您非常不明确的任务,可能更好:

@ECHO OFF
SETLOCAL EnableDelayedExpansion
DEL folders.cmd 2>nul
SET "FolderCount=0"
FOR /D %%i IN (*) DO (
    SET /A FolderCount+=1
    ECHO SET "%%i=C:\test!FolderCount!">>folders.cmd
)
TYPE folders.cmd
ENDLOCAL
PAUSE
此代码以递增的数字将
C:\test
写入其他批处理文件

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • del/?
  • echo/?
  • endlocal/?
  • 获取/?
  • 暂停/?
  • 设置/?
  • setlocal/?
  • 键入/?

您在这个问题中使用的概念称为数组。您可以使用中描述的方法访问数组元素。例如:

SETLOCAL ENABLEDELAYEDEXPANSION

CALL folders.cmd
FOR /D %%i IN (*) DO (
    ECHO !%%i!
)
。。。或:

CALL folders.cmd
FOR /D %%i IN (*) DO (
    CALL ECHO %%%%i%%
)
编辑:添加呼叫示例的输出


如果您的文件
folders.cmd
包含:

SET SubFolder1=C:\test1
SET SubFolder2=C:\test2
SET SubFolder3=C:\test3
我将使用以下代码:

for /F "tokens=3 delims== " %%a in (folders.cmd) do echo %%a
这将产生产出:

C:\test1
C:\test2
C:\test3

更完整的命令是:

for /F "tokens=2,3 delims== " %%a in (folders.cmd) do echo %%a maps to %%b
输出:

SubFolder1 maps to C:\test1
SubFolder2 maps to C:\test2
SubFolder3 maps to C:\test3

我想完成的任务是将文件夹写入另一个文件,稍后可以在其中添加映射目录。然后我需要读取这些映射的目录,但我不确定如何读取,因为文件夹不一定是已知的。所以我不能准确地使用%SubFolder1%作为例子。非常感谢,这正是我所需要的。这个!%%我工作正常,但是%%%%i%%不工作,而是返回%SubFolder1%
SubFolder1 maps to C:\test1
SubFolder2 maps to C:\test2
SubFolder3 maps to C:\test3