For loop 两个for循环,用于批量从两个不同的文本文件获取数据
我正在尝试创建一个小脚本,它将从一个文本文件(Users.txt)中为每个用户名创建一个文件夹,并在该文件夹中创建另一个ID为(ID.txt)的子文件夹 我创建了以下脚本:For loop 两个for循环,用于批量从两个不同的文本文件获取数据,for-loop,batch-file,For Loop,Batch File,我正在尝试创建一个小脚本,它将从一个文本文件(Users.txt)中为每个用户名创建一个文件夹,并在该文件夹中创建另一个ID为(ID.txt)的子文件夹 我创建了以下脚本: @echo off setlocal EnableDelayedExpansion set Users=Users.txt set ID=id.txt for /f %%i IN (%Users%) DO (( set username=%%i ) for /f %%j IN (%
@echo off
setlocal EnableDelayedExpansion
set Users=Users.txt
set ID=id.txt
for /f %%i IN (%Users%) DO ((
set username=%%i
)
for /f %%j IN (%ID%) DO (
set ID=%%j
mkdir c:\Test\!username!\!ID!
)
)
但结果是,对于每个“用户”文件夹,我都得到了ID的所有子文件夹
谢谢你的帮助 根据您的注释,您可以保留一个排序计数器,并在嵌套循环中根据该计数器查找正确的ID。但我甚至不确定这是否可行 类似这样的东西可能(未经测试):
尽管这是一段非常混乱的代码,但批处理脚本似乎并不适合这项工作。如果您可以合并文件(例如,每行都有“USERNAME;ID”的CSV文件),这将变得容易得多。否则,我建议切换到更强大的脚本语言,如powershell。一种非常丑陋的方式;读取用户名,然后从id文件中获取相应的行
@echo off
setlocal disabledelayedexpansion
set Users=Users.txt
set ID=id.txt
set linenum=0
for /f %%i IN (%Users%) DO (
call :getId %%linenum%% %%i
set /a linenum=linenum+1
)
goto :eof
:getId
if "%1"=="0" (set options=) else set options=skip=%1
for /f "%options%" %%j in (%id%) do (
echo %2\%%j
goto:eof
)
假设两个文件的行数相同:
@echo off
setlocal EnableDelayedExpansion
set "userFile=Users.txt"
set "idFile=id.txt"
<"%idFile%" (
for "usebackq" /f %%i IN ("%userFile%") do (
set /p "id="
mkdir "c:\Test\%%i\!id!"
)
)
@echo关闭
setlocal EnableDelayedExpansion
设置“userFile=Users.txt”
设置“idFile=id.txt”
数据的格式是什么,即users.txt和id.txt的结构如何?嘿,Jeroenh,谢谢你的快速回复!每一行=users.txt中的用户,ID.txt中的情况也一样,每个ID用一个简单的“回车”分隔,那么如何将用户与其ID链接?它们按相同的顺序排序,ID.txt中的第一个ID用于users.txt中的第一个用户,依此类推。。假设我有10行用户和10行ID,ID.txt中的第5个ID属于users.txt文件中的第5个用户。
@echo off
setlocal EnableDelayedExpansion
set "userFile=Users.txt"
set "idFile=id.txt"
<"%idFile%" (
for "usebackq" /f %%i IN ("%userFile%") do (
set /p "id="
mkdir "c:\Test\%%i\!id!"
)
)