使用批量编程自动执行条形码批量打印

问题描述 投票:0回答:1

嗨,我正在尝试使用.bat文件自动化我的串行条形码打印。我的条形码包含一个13位数字,左边是4位数字(例如“WXYZ000000000”,其中WXYZ是常量,序列化是从000000000到999999999)。为此我创建了一个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>

现在我需要的是用用户定义的条目替换9位零。 (例如,来自000045785的1000个序列标签。

我写了一个批处理文件,但似乎是打印相同的条形码。任何帮助,将不胜感激。

@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
batch-file serialization printing barcode
1个回答
1
投票
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!
)

对代码的更改,一步一步:

  1. 生成相同代码的原因是您使用的是%num1add%。请搜索SO以获取delayed expansion%num1add%被其初始值取代;要获得运行时值(因为它改变),你需要!num1add!
  2. 您会注意到num1add显示的echo具有被抑制的前导零。也可能是echo!num1add!(运行时间值)。因此,您的代码将用000000000替换1234,而不是000001234。解决这个问题的方法是将你的数字附加到000000000,然后取结果字符串的最后9个字符(!nextnum:~-9!) - 注意这是nextnum的运行时值的子字符串。
  3. 你可能不会立即绊倒下一个问题 - 或者你可能会忽视它。当批处理将包含前导零的字符串解释为数字时,它假定由于存在前导零,因此该数字为八进制。因此它会反对数字中的任何89,并将'00001234'视为668,因此系列将为669,670等.set /a语法使用运行时变量值,除非参数为%var%,原因是在delayed expansion。因此,更简单的代码使用set /a语法来增加您的值。

就个人而言,我会重新考虑你的编号方案,因为13位代码在商业中用作商品ID代码(8位和12位数字; 14位代码包装代码)所以如果有可能的话他们可能会感到困惑,毫无疑问他们会。

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

© www.soinside.com 2019 - 2024. All rights reserved.