我有一个问题,批量替换字符串

时间:2011-10-06 00:22:47

标签: encryption batch-file cmd

我正在尝试为.dll文件进行自己的加密。 但它不会像我想要的那样工作也可以得到帮助。


@echo off
set /p lol=(
echo %lol%>test.dll
for /f "tokens=*" %%j in (test.dll) do set f1=%%j
set f1=%f1:a=QUE%
set f1=%f1:b=GUI%
set f1=%f1:c=DOP%
set f1=%f1:d=EXO%
set f1=%f1:e=CUI%
set f1=%f1:f=RAY%
set f1=%f1:g=TAI%
set f1=%f1:h=YAM%
set f1=%f1:i=*+=%
set f1=%f1:j=UIT%
set f1=%f1:k=ITO%
set f1=%f1:l=ORC%
set f1=%f1:m=KIP%
set f1=%f1:n=JAA%
set f1=%f1:o=(.)%
set f1=%f1:p=)Y(%
set f1=%f1:q=!i!%
set f1=%f1:r=$S$%
set f1=%f1:s=WPL%
set f1=%f1:t=%*/%
set f1=%f1:u=FOL%
set f1=%f1:v=FUK%
set f1=%f1:w=@.@%
set f1=%f1:x=S$$%
set f1=%f1:y=^.^%
set f1=%f1:z=AAP%
set f1=%f1:A=qal%
set f1=%f1:B=gal%
set f1=%f1:C=dor%
set f1=%f1:D=ert%
set f1=%f1:E=332%
set f1=%f1:F=rat%
set f1=%f1:G=pok%
set f1=%f1:H=yap%
set f1=%f1:I=8-)%
set f1=%f1:J=uki%
set f1=%f1:K=ipa%
set f1=%f1:L=o:)%
set f1=%f1:M=kop%
set f1=%f1:N=jas%
set f1=%f1:O=911%
set f1=%f1:P=007%
set f1=%f1:Q=112%
set f1=%f1:R=4gh%
set f1=%f1:S=wrq%
set f1=%f1:T=5hi%
set f1=%f1:U=777%
set f1=%f1:V=gak%
set f1=%f1:W=2g2%
set f1=%f1:X=dom%
set f1=%f1:Y=666%
set f1=%f1:Z=aal%
set f1=%f1:0=ugb%
set f1=%f1:1=zup%
set f1=%f1:2=xfi%
set f1=%f1:3=cmv%
set f1=%f1:4=vui%
set f1=%f1:5=but%
set f1=%f1:6=nom%
set f1=%f1:7=mon%
set f1=%f1:8=hub%
set f1=%f1:9=whn%
set f1=%f1:!=ZIP%
set f1=%f1:@=XLO%
set f1=%f1:$=CVB%
set f1=%f1:%=VQE%
set f1=%f1:^=BUY%
set f1=%f1:&=NAM%
set f1=%f1:*=MAL%
set f1=%f1:(=LAL%
set f1=%f1:)=JN9%
set f1=%f1:#=255%
set f1=%f1:_=?19%
set f1=%f1:-={GT%
set f1=%f1:==SC}%
set f1=%f1:+=J~L%
set f1=%f1:\=;RT%
set f1=%f1:|=:OP%
set f1=%f1:{=KAA%
set f1=%f1:}=KAL%
set f1=%f1:[=PLO%
set f1=%f1:]=DQW%
set f1=%f1::=PIP%
set f1=%f1:;=AR9%
set f1=%f1:"=UNF%
set f1=%f1:'=CNP%
set f1=%f1:<=JMN%
set f1=%f1:>=HBH%
set f1=%f1:,=25J%
set f1=%f1:.=YF7%
set f1=%f1:/=UYG%
set f1=%f1:?=DFG%
set f1=%f1:`=PUY%
set f1=%f1:~=CV7%
echo %f1%>test.dll
pause
exit

3 个答案:

答案 0 :(得分:1)

老实说,我不确定代码片段的用途是什么。首先,重定向>将清除dll文件的所有内容。接下来,我怀疑在第一个echo之后,set块中的任何命令都有机会执行。当然,%lol%变量永远不会获得块内的值,除非启用delayedexpansion,否则将在执行set block中的任何内容之前对其进行求值。试试enabling delayedexpansion.

把它放在首位:

setlocal enabledelayedexpansion

并将所有%var%的资格限定为!var!

希望这篇文章可以为你提供一些启动,帮助你实现自己的目标。

答案 1 :(得分:0)

首先,完整的想法很好,但没有价值,因为单靠批量无法完成 至少你不能批量读取NUL(0x00)字符。

为什么你的代码无法工作有很多原因,你在尝试同时编写它时从test.dll读取,你怎么期望它可以工作?

您的代码不会处理任何特殊字符,批处理可能会有用,但这很棘手。

set f1=%f1:*=MAL%行无效,因为您无法以这种方式替换单颗星 set f1=%f1:==SC}%set f1=%f1:~=CV7% 也会因同样的原因而失败。

set f1=%f1:%=VQE%f1始终更改为=VQE,与f1的内容无关。

即使您删除这些行,您的翻译也会多次翻译每个字符,输入a会产生

的输出

ZIPhubKAAGTJN9ZIPvuighabuthiwhnzupzupwhnzupzupPIPJN9cmvcmvxfivuighbuthiwhnzupzupvuighvuighabuthiwhnzupzupwhnzupzupPIPJN9*J~L=*UYG

要发现此类问题,最好删除exit并启用echo on

答案 2 :(得分:0)

我不确定它是固定的还是更多的,但我得到它输出:

CVBXLOYF7XLOugbugbmonwhnzupzupPIPJN9CVBvuighabuthiwhnzupzupwhnzupzupPIPJN9cmvcmvxfivuighbuthiwhnzupzupvuighvuighabuthiwhnzupzupwhnzupzupPIPJN9*J~L=cmvcmvxfivuighbuthiwhnzupzupvuighvuighabuthiwhnzupzupwhnzupzupPIPJN9*J~L=xfigxfirqCVBCVBLALYF7JN9vuighabuthiwhnzupzupwhnzupzupPIPJN9cmvcmvxfivuighbuthiwhnzupzupvuighvuighabuthiwhnzupzupwhnzupzupPIPJN9*J~L=*/

再次,不确定它是否有效,但我确实使用了:

setlocal enabledelayedexpansion

你有没有办法建立逆转这个?

REM @echo off
setlocal enabledelayedexpansion
set /p lol=(
echo %lol%>test.txt
for /f "tokens=*" %%j in (test.txt) do set f1=%%j
set f1=%f1:a=QUE%
set f1=%f1:b=GUI%
set f1=%f1:c=DOP%
set f1=%f1:d=EXO%
set f1=%f1:e=CUI%
set f1=%f1:f=RAY%
set f1=%f1:g=TAI%
set f1=%f1:h=YAM%
set f1=%f1:i=*+=%
set f1=%f1:j=UIT%
set f1=%f1:k=ITO%
set f1=%f1:l=ORC%
set f1=%f1:m=KIP%
set f1=%f1:n=JAA%
set f1=%f1:o=(.)%
set f1=%f1:p=)Y(%
set f1=%f1:q=!i!%
set f1=%f1:r=$S$%
set f1=%f1:s=WPL%
set f1=%f1:t=%*/%
set f1=%f1:u=FOL%
set f1=%f1:v=FUK%
set f1=%f1:w=@.@%
set f1=%f1:x=S$$%
set f1=%f1:y=^.^%
set f1=%f1:z=AAP%
set f1=%f1:A=qal%
set f1=%f1:B=gal%
set f1=%f1:C=dor%
set f1=%f1:D=ert%
set f1=%f1:E=332%
set f1=%f1:F=rat%
set f1=%f1:G=pok%
set f1=%f1:H=yap%
set f1=%f1:I=8-)%
set f1=%f1:J=uki%
set f1=%f1:K=ipa%
set f1=%f1:L=o:)%
set f1=%f1:M=kop%
set f1=%f1:N=jas%
set f1=%f1:O=911%
set f1=%f1:P=007%
set f1=%f1:Q=112%
set f1=%f1:R=4gh%
set f1=%f1:S=wrq%
set f1=%f1:T=5hi%
set f1=%f1:U=777%
set f1=%f1:V=gak%
set f1=%f1:W=2g2%
set f1=%f1:X=dom%
set f1=%f1:Y=666%
set f1=%f1:Z=aal%
set f1=%f1:0=ugb%
set f1=%f1:1=zup%
set f1=%f1:2=xfi%
set f1=%f1:3=cmv%
set f1=%f1:4=vui%
set f1=%f1:5=but%
set f1=%f1:6=nom%
set f1=%f1:7=mon%
set f1=%f1:8=hub%
set f1=%f1:9=whn%
set f1=%f1:!=ZIP%
set f1=%f1:@=XLO%
set f1=%f1:$=CVB%
set f1=%f1:^%=VQE%
set f1=%f1:^=BUY%
set f1=%f1:&=NAM%
set f1=%f1:^*=MAL%
set f1=%f1:(=LAL%
set f1=%f1:)=JN9%
set f1=%f1:#=255%
set f1=%f1:_=?19%
set f1=%f1:-={GT%
set f1=%f1:^==SC}%
set f1=%f1:+=J~L%
set f1=%f1:\=;RT%
set f1=%f1:|=:OP%
set f1=%f1:{=KAA%
set f1=%f1:}=KAL%
set f1=%f1:[=PLO%
set f1=%f1:]=DQW%
set f1=%f1::=PIP%
set f1=%f1:;=AR9%
set f1=%f1:"=UNF%
set f1=%f1:'=CNP%
set f1=%f1:<=JMN%
set f1=%f1:>=HBH%
set f1=%f1:,=25J%
set f1=%f1:.=YF7%
set f1=%f1:^/=UYG%
set f1=%f1:?=DFG%
set f1=%f1:`=PUY%
set f1=%f1:^~=CV7%
echo %f1%>test.txt
pause

我不得不使用(^)来逃避一些弄乱输出的字符。