使用批量编程自动化条码批量打印

Automate the Barcode Batch printing using batch programming

您好,我正在尝试使用 .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:5.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:5.PRN /B \PC1\Printer
 set /A Num1Add+=1
 echo !Num1Add!
)

逐步更改您的代码:

  1. 生成相同代码的原因是您使用的是 %num1add%。请在 SO 中搜索 delayed expansion%num1add% 被它的 初始值 取代;要获得 运行 时间值(随着它的变化),您需要 !num1add!

  2. 您会注意到 echo 显示的 num1add 的前导零被抑制了。 echo 也可能是 !num1add!运行-time 值)。因此,您的代码会将 000000000 替换为 1234,而不是 000001234。解决这个问题的方法是将您的号码附加到 000000000,然后获取结果字符串的最后 9 个字符 (!nextnum:~-9!) - 注意这是 [=63= 的子字符串nextnum.

  3. 的时间
  4. 您可能不会立即被下一个问题绊倒——或者您可能忽略了它。当批处理将包含前导零的字符串解释为数字时,它假定由于有前导零,所以数字是 octal。因此它会反对数字中的任何 89,并将 '00001234' 视为 668,因此该系列将是 669、670 等。 set /a 语法使用 运行-time 变量值,除非由于 delayed expansion 中的原因参数为 %var%。因此,更简单的代码使用 set /a 语法来增加您的值。

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

哦 - 不要输入前导零。留待批处理。