我正在尝试制作批处理文件,以32个块的间隔存储数千个帐户的帐户名和密码。它会在每32个帐户的第一个帐户中执行不同的操作。我目前有这个:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
@set a=1
@set b=32
@set c=1
@set d=32
@set e=31
@set f=1
@set h=1427
FOR /f "delims=" %%g IN (acct.txt) DO (
IF !a! EQU !f! (
echo %%g >> ACCTS!f!-!b!.bat
@set /a a=!a!+!c!
ECHO %%g
@set /a g=!g!+!h!
ECHO %%g
@set /a g=!g!-!h!
) ELSE (
ECHO %%g
echo %%g >> ACCTS!f!-!b!.bat
@set /a a=!a!+!c!
)
IF !a! EQU !b! (
echo %%g >> ACCTS!f!-!b!.bat
@set /a b=!b!+!d!
@set /a f=!f!+!d!
@set /a a=!a!+!c!
ECHO %%g
pause
)
)
ECHO FINISHED
pause
但是,我正在阅读的文本文件包含1427行的密码,我需要配置用户名和密码。有没有办法从g和g + 1427读取然后写入?显然,我在这里尝试的方法不起作用。
此致 用户
答案 0 :(得分:0)
@ECHO OFF
SETLOCAL enabledelayedexpansion
SET count=0
SET distance=5
:: create a temporary file with a dummy line,
:: then numbered lines from the data file
ECHO 0:dummy >dummy.txt
TYPE acct.txt|FINDSTR /n "$">>dummy.txt
:: Now pair lines
(
FOR /l %%z IN (1,1,%distance%) DO (
CALL :grabline account %%z
SET /a skip=%%z+%distance%
CALL :grabline password !skip!
SET "account=!account:*:=!"
SET "password=!password:*:=!"
ECHO(!account! !password!
)
)>acctpass.txt
del dummy.txt
GOTO :eof
:grabline
FOR /f "skip=%2delims=" %%d IN (dummy.txt) DO SET "%1=%%d"&GOTO :eof
GOTO :eof
我不知道"32 block intervals"
是什么,但这是一个例程,用于配对位于指定距离的线。我使用距离5进行文件测试
帐户1 ... account5 密码1 ... password5
(其中......是缺失的行,而不是...
)
得到了
account1密码1 ... account5密码5
从那里,你应该能够使它工作。如果不是,正如dbenham所说,请更具体并举例说明。
答案 1 :(得分:0)
您的问题没有得到很好的解释,错过了一些细节。当发生这种情况时,我们可以猜测您想要实现的目标,并以任何方式填补空白。例如:
如果输入文件的大小小于64 MB,则可以将整个文件加载到数组中(内存变量)。例如,如果文件包含总共1408 + 1427行,那么每个用户名或密码最多可能有64MB / 2835减去变量名称= 23650个字符大约!如果每个用户名或密码有8个字符,变量名称使用8个字符作为平均值,那么您的文件可能有64MB / 16 = 4 MB行!出于这个原因,我认为这种方法适合您的问题。当行加载到内存变量中时,您可以直接访问其中任何一个。
下面的批处理文件在line
数组中加载文本文件,然后以前面描述的方式处理它。
@echo off
setlocal EnableDelayedExpansion
rem Load the file in "line" array
set index=0
for /F "delims=" %%a in (acct.txt) do (
set /A index+=1
set line[!index!]=%%a
)
rem Process the lines in blocks of 32
set /A numBlocks=1428/32, firstAcct=1
for /L %%b in (1,1,%numBlocks%) do (
set /A lastAcct=firstAcct+31
(for /L %%a in (!firstAcct!,1,!lastAcct!) do (
set /A password=%%a+1427
for %%p in (!password!) do echo Username: !line[%%a]! Password: !line[%%p]!
)) > ACCTS!firstAcct!-!lastAcct!.txt
set /A firstAcct=lastAcct+1
)