批量 - 更改变量的数据

时间:2017-12-19 16:51:48

标签: batch-file

我正在使用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

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

使用命令行:

>>userdata.txt echo/%to%

现在可以不定义环境变量to,而 ECHO 不会输出 ECHO 模式的当前状态,因为正向斜杠/命令行。

为了安全起见,在此命令行中指定了输出重定向,以便能够在不写入尾随空格的情况下通过引用to输出字符串值19来输出进入文件userdata.txt

命令行echo.%to% >> userdata.txt有两个小缺点:

  1. 虽然极不可能,echo.可能会失败并按预期完成不同的操作,有关详细信息,请参阅DosTips论坛主题ECHO. FAILS to give text or blank line - Instead use ECHO/

  2. %to%和重定向运算符>>之间的空格也会作为尾随空格写入输出文件userdata.txt

  3. 示例来说明差异:

    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