我正在尝试创建一个小脚本,它将为文本文件(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 (%ID%) DO (
set ID=%%j
mkdir c:\Test\!username!\!ID!
)
)
但结果是,对于每个“用户”文件夹,我获得了所有ID的子文件夹。
感谢您的帮助!
答案 0 :(得分:1)
假设两个文件的行数相同:
@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!"
)
)
答案 1 :(得分:0)
根据您的评论,您可以保留一个排序计数器,并在您的嵌套循环中根据该计数器查找正确的ID。我甚至不确定这是否可行。
这样的事可能(未经测试):
set COUNTER = 0
for /f %%i in (%users%) do (
set /A COUNTER = %COUNTER%+1
goto :callInnerLoop %%i %COUNTER%
)
goto :EOF
:callInnerLoop
SET LOCALCOUNTER=0
for /f %%i in (%id%) DO (
set /A COUNT=%COUNT%+1
if (!COUNT!=%2) (
REM FOUND %ID%
goto :EOF
)
)
这是非常混乱的代码,但批处理脚本似乎不适合这项工作。如果您可以合并文件(例如,每行上带有'USERNAME; ID'的CSV文件),这将变得更加容易。否则我建议切换到更强大的脚本语言,如powershell。
答案 2 :(得分:0)
一种非常丑陋的方式;读取用户名然后从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
)