我正在使用SikuliX功能进行python项目。我想创建一个自动邮件发送系统,但我导入TO,CC / BCC等等。通过BAT文件,然后将其数据发送到txt,python导入txt然后它用于执行工作。但我的问题是,当我在批处理中留下一个变量为空时,它会自动将其填充为“ECHO关闭。”#39;我怎么能阻止这个?这是代码:
@echo Off
SETLOCAL EnableDelayedExpansion
for /F "tokens=1,2,3 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set "DEL=%%a"
)
call :colorEcho f0 "-----[]AutoMail System[]-----"
echo.
echo.
call :colorEcho 0f "Fill out the next part:"
echo.
pause
del userdata.txt
echo.
echo.
set /p to="TO: "
echo To: >> userdata.txt
echo %to% >> userdata.txt
set /p ccbcc="CC/BCC: "
CC/ BCC: >> userdata.txt
%ccbcc% >> userdata.txt
set /p targy="Tárgy: "
Targy: >> userdata.txt
%targy% >> userdata.txt
set /p szoveg=">->-> "
szoveg: >> userdata.txt
%szoveg% >> userdata.txt
echo.
PAUSE
echo.
echo Starting AutoFill
echo.
PAUSE
start C:\\Users\\gutiw\\Desktop\\Sikuli\\runsikulix.cmd -r C:\\Users\\gutiw\\Desktop\\Sikuli\\AUTOMATION\\AutoMail.sikuli
exit
:colorEcho
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1i
感谢您的帮助!
答案 0 :(得分:1)
使用命令行:
>>userdata.txt echo/%to%
现在可以不定义环境变量to
,而 ECHO 不会输出 ECHO 模式的当前状态,因为正向斜杠/
命令行。
为了安全起见,在此命令行中指定了输出重定向,以便能够在不写入尾随空格的情况下通过引用to
输出字符串值1
到9
来输出进入文件userdata.txt
。
命令行echo.%to% >> userdata.txt
有两个小缺点:
虽然极不可能,echo.
可能会失败并按预期完成不同的操作,有关详细信息,请参阅DosTips论坛主题ECHO. FAILS to give text or blank line - Instead use ECHO/。
%to%
和重定向运算符>>
之间的空格也会作为尾随空格写入输出文件userdata.txt
。
示例来说明差异:
del userdata.txt 2>nul
set to=1
>>userdata.txt echo/%to%
使用上面三行执行批处理文件会导致Windows命令解释程序真正执行:
del userdata.txt 2>nul
set to=1
echo/11>>userdata.txt
文件userdata.txt
包含1
,回车和换行,即三个字节,带有十六进制值31 0D 0A
。
包含三行的批处理文件
del userdata.txt 2>nul
set to=1
echo.%to% >>userdata.txt
导致Windows命令解释器真正执行
del userdata.txt 2>nul
set to=1
echo.1 1>>userdata.txt
并且文件userdata.txt
包含1
,空格字符,回车符和换行符,即带有十六进制值31 20 0D 0A
的四个字节。< / p>
在这种情况下,它也可以像往常一样在右侧指定重定向,而在环境变量引用%to%
和重定向运算符>>
之间没有空格,即使用命令行:
echo/%to%>>userdata.txt
这是因为命令 ECHO 后的/
。如果.
没有问题1,也可以使用echo.
。
另见Why does ECHO command print some extra trailing space into the file?
答案 1 :(得分:0)
所以看起来它现在正在工作 问题是我还没有使用echo和变量之间的。。
编辑后看起来像这样:
@echo Off
SETLOCAL EnableDelayedExpansion
for /F "tokens=1,2,3 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set "DEL=%%a"
)
call :colorEcho f0 "-----[]AutoMail System[]-----"
echo.
echo.
call :colorEcho 0f "Fill out the next part"
echo.
pause
del userdata.txt
echo.
echo.
set /p to="TO: "
echo To: >> userdata.txt
echo.%to% >> userdata.txt
set /p ccbcc="CC/BCC: "
echo.CC/ BCC: >> userdata.txt
echo.%ccbcc% >> userdata.txt
set /p targy="Tárgy: "
echo.Targy: >> userdata.txt
echo.%targy% >> userdata.txt
set /p szoveg=">->-> "
echo.szoveg: >> userdata.txt
echo.%szoveg% >> userdata.txt
echo.
PAUSE
echo.
echo Starting AutoFill
echo.
PAUSE
start C:\\Users\\gutiw\\Desktop\\Sikuli\\runsikulix.cmd -r C:\\Users\\gutiw\\Desktop\\Sikuli\\AUTOMATION\\AutoMail.sikuli
exit
:colorEcho
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1i