首页 > 解决方案 > 如何正确获取字符“!” 当延迟扩展处于活动状态时变为变量值?

问题描述

我制作了这个批处理脚本来将电子邮件和密码分隔在两个单独的文件中,并将它们从ComboBox.txt列表示例中保存下来:

分隔符可以是":,;"

我的问题是感叹号“!” 在密码中被SetLocal EnableDelayedExpansion忽略

所以我可以得到除“!”之外的所有特殊字符

组合框.txt

hackoo@hackoo.com,&azerty123><*
someone@gmail.com;He>llo123*!
andrew@yahoo.com:mommy!845
Cooker124@gmail.com:my!love1547
blue@hotmail:something!b010
hello@gmail.com:something!6655

Extract_Email_Password.bat

@echo off
>nul chcp 65001
Title Extraire les emails et les passwords dans deux fichiers séparés de type ComboBox ".txt" by Hackoo 2019
Mode 85,3 & color 0A
Set "InputFile=%1"
Set "OutPutFile_Emails=%~dp0Emails_Extracted.txt"
Set "OutPutFile_Passwords=%~dp0Passwords_Extracted.txt"
If Exist "%OutPutFile_Emails%" Del "%OutPutFile_Emails%"
If Exist "%OutPutFile_Passwords%" Del "%OutPutFile_Passwords%"
If [%InputFile%] EQU [] goto :Aide
echo(
echo     Patientez un peu... extraction des emails et les mots passes sont en cours ...
SetLocal EnableDelayedExpansion
@for /f "delims=:;, tokens=1,2" %%a in ('Type "%InputFile%"') do (
    Set "Email=%%a"
    Set "Password=%%b"
    If defined Email echo !Email!>>"%OutPutFile_Emails%"
    If defined Password echo !Password!>>"%OutPutFile_Passwords%"
)
EndLocal
If Exist "%OutPutFile_Emails%" Start "" "%OutPutFile_Emails%"
If Exist "%OutPutFile_Passwords%" Start "" "%OutPutFile_Passwords%"
Exit 
::********************************************************************************
:Aide
Mode 90,5 & Color 0C
echo(
echo          Glisser et déposer le fichier texte sur,ce script "%~nx0" 
echo          Pour extraire les emails et les passwords dans deux fichiers séparés !
Timeout /T 10 /NoBreak>nul
Exit
::********************************************************************************

标签: batch-file

解决方案


我不确定您为什么要设置名为Emailand的变量Password,而您可以直接使用元变量:

Echo(
Echo     Patientez un peu... extraction des emails et les mots passes sont en cours ...
If Not Exist "%InputFile%" Exit /B
For /F "UseBackQ Tokens=1-2 Delims=:;," %%A In ("%InputFile%") Do If Not "%%B"=="" (
    >>"%OutPutFile_Emails%" Echo(%%A

不要在您的脚本中启用延迟扩展,此代码将替换您的行10- 20


推荐阅读