4

我正在尝试创建一个小脚本,该脚本将从文本文件(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 的子文件夹。

4

3 回答 3

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!"
  )
)
于 2012-11-19T13:56:23.330 回答
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
   )   
)

不过,这确实是一段杂乱无章的代码,批处理脚本似乎不太适合这项工作。如果您可以合并文件(例如,每行带有“用户名;ID”的 CSV 文件),这将变得容易得多。否则我会建议切换到更强大的脚本语言,如 powershell。

于 2012-11-19T13:45:13.970 回答
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
 )
于 2012-11-19T13:55:03.317 回答