Batch file 使用批处理编程自动化条形码批处理打印

Batch file 使用批处理编程自动化条形码批处理打印,batch-file,serialization,printing,barcode,Batch File,Serialization,Printing,Barcode,嗨,我正在尝试使用.bat文件自动打印序列条码。我的条形码包含一个13位数字,左侧4位数字为常量(例如“WXYZ000000000”,其中WXYZ为常量,序列化范围为000000000到9999999)。为此,我创建了一个PRN文件 <xpml><page quantity='0' pitch='25.1 mm'></xpml>SIZE 46.4 mm, 25.1 mm GAP 3 mm, 0 mm DIRECTION 0,0 REFERENCE 0,0 OF

嗨,我正在尝试使用.bat文件自动打印序列条码。我的条形码包含一个13位数字,左侧4位数字为常量(例如“WXYZ000000000”,其中WXYZ为常量,序列化范围为000000000到9999999)。为此,我创建了一个PRN文件

<xpml><page quantity='0' pitch='25.1 mm'></xpml>SIZE 46.4 mm, 25.1 mm
GAP 3 mm, 0 mm
DIRECTION 0,0
REFERENCE 0,0
OFFSET 0 mm
SET TEAR OFF
SET CUTTER OFF
SET PARTIAL_CUTTER OFF
<xpml></page></xpml><xpml><page quantity='0' pitch='25.1 mm'></xpml>DOWNLOAD 
"FORM_0.BAS"
BARCODE 496,277,"128",204,0,180,3,6,AA$
CODEPAGE 1252
TEXT 377,65,"0",180,8,8,AB$
EOP
<xpml></page></xpml><xpml><page quantity='1' pitch='25.1 mm'>
</xpml>AA$="WXYZ000000000"
AB$="WXYZ000000000"
SIZE 46.4 mm, 25.1 mm
GAP 3 mm, 0 mm
SET PEEL ON
CLS
RUN "FORM_0.BAS"
PRINT 1,1
<xpml></page></xpml>KILL "FORM_0.BAS"
<xpml><end/></xpml>
逐步更改代码:

  • 生成相同代码的原因是您正在使用
    %num1add%
    。请搜索SO以查找延迟扩展<代码>%num1add%被其初始值替换;要获取运行时值(随着它的变化),您需要
    !num1add

  • 您可能已经注意到,
    echo
    显示的
    num1add
    已抑制前导零。也可能是
    回声
    !num1add(运行时值)。因此,您的代码会将
    000000000
    替换为
    1234
    ,而不是
    000001234
    。解决方法是将数字附加到
    000000000
    ,然后获取结果字符串的最后9个字符(
    !nextnum:~-9!
    )-注意这是
    nextnum
    的运行时值的子字符串

  • 你可能不会马上被下一个问题绊倒——或者你可能忽视了它。当batch将包含前导零的字符串解释为数字时,它假定由于存在前导零,因此数字为八进制。因此,它将反对数字中的任何
    8
    9
    ,并将“00001234”视为668,因此序列将为669670等。
    set/a
    语法使用运行时变量值,除非由于
    延迟扩展中的原因,参数为
    %var%
    。因此,更简单的代码使用
    set/a
    语法来增加值

  • 就我个人而言,我会重新考虑你们的编号方案,因为13位代码在商业中用作商品id代码(8位和12位代码;14位代码用于包装),所以如果有任何可能混淆,毫无疑问它们会混淆


    哦,不要输入前导零。把它留给批处理。

    太好了!它的工作,感谢这个有用的信息。竖起大拇指,伙计。
    @ECHO OFF
    TITLE Barcode printing
    ECHO From where to start printing:
    SET /P Num1Add=
    ECHO How much barcode you want from the first number:
    SET /P Num2Add=
    ECHO.
    setlocal enabledelayedexpansion
    FOR /L %%A IN (1,1,%Num2Add%) DO (
    powershell -Command "(gc 124.prn) -replace '000000000', '%Num1Add%' | Out File -encoding ASCII 125.prn"
    COPY C:\125.PRN /B \\PC1\Printer
    set /A Num1Add=!Num1Add!+1
    echo !Num1Add!
    )
    endlocal
    
    FOR /L %%A IN (1,1,%Num2Add%) DO (
     set "nextnum=000000000!num1add!"
     powershell -Command "(gc 124.prn) -replace '000000000', '!nextnum:~-9!' | Out File -encoding ASCII 125.prn"
     COPY C:\125.PRN /B \\PC1\Printer
     set /A Num1Add+=1
     echo !Num1Add!
    )