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