嗨,我正在尝试使用.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
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!
)
对代码的更改,一步一步:
%num1add%
。请搜索SO以获取delayed expansion
。 %num1add%
被其初始值取代;要获得运行时值(因为它改变),你需要!num1add!
num1add
显示的echo
具有被抑制的前导零。也可能是echo
是!num1add!
(运行时间值)。因此,您的代码将用000000000
替换1234
,而不是000001234
。解决这个问题的方法是将你的数字附加到000000000
,然后取结果字符串的最后9个字符(!nextnum:~-9!
) - 注意这是nextnum
的运行时值的子字符串。8
或9
,并将'00001234'视为668,因此系列将为669,670等.set /a
语法使用运行时变量值,除非参数为%var%
,原因是在delayed expansion
。因此,更简单的代码使用set /a
语法来增加您的值。就个人而言,我会重新考虑你的编号方案,因为13位代码在商业中用作商品ID代码(8位和12位数字; 14位代码包装代码)所以如果有可能的话他们可能会感到困惑,毫无疑问他们会。
哦 - 并且不要输入前导零。把它留给批处理。