我已经尝试过这样在早上的大部分时间。
这实际上与2013年的这个问题相同,没有人回复:
batch script with FOR does not work
我会尽力格式化代码,以便易于理解,也许我会得到答案......
我正在通过我们的服务台票务系统进行存档项目。 出于分类目的,文件将包含票号和日期。
但是,票号的长度不一。要解决此问题,所有票号都是6位数,较短的数字用前面的零填充(即1234变为001234)。
我可以获得票号,但我需要找到它的长度才能知道要添加多少个零。
这有效:
echo off
set my_str=12345
set length=0
:Loop
if defined my_str (
set my_str=%my_str:~1%
set /A "length+=1"
goto Loop)
echo the string is %length% characters long
但是,我在列表中得到了一堆票号。 所以,我读完了这个:
set statements don't appear to work in my batch file
迷失了读这个:
http://www.computing.net/howtos/show/batch-script-variable-expansion-win200-and-up/248.html
我试过这个:
setlocal enabledelayedexpansion
echo off
for /f %%a IN (test.txt) do (
set my_str=%%a
set length=0
:Loop
if defined my_str (
set my_str=!my_str:~1!
set /A "length+=1"
echo %length%
goto Loop)
echo the string is %length% characters long
)
但它只读取test.txt的第一行
为什么FOR / F循环失败?
如何让它发挥作用?
答案 0 :(得分:4)
您不需要知道票号字符串的长度(当您可以确保它不超过6个字符时),您可以前缀5个零并分割最后6个字符,然后:< / p>
set my_str=12345
set my_str=00000%my_str%
set my_str=%my_str:~-6%
echo %my_str%
如果您仍想获得字符串长度,请参阅this post。
您无法在goto
正文中使用for
,goto
会打破for
循环上下文。但是,您可call
for
内的子例程,而{ - 1}}可能包含goto
。
答案 1 :(得分:0)
您的批处理脚本完全符合您的描述:读取多个文件的第一行(在您的情况下,只有一个文件)并确定第一行的长度。即你的for循环的内部部分错了。
我也不知道正确的解决方案,但我认为此页面对您有所帮助:
我希望有所帮助。
答案 2 :(得分:0)
这似乎是XY problem。不要担心计算字符串的长度,只需使用内置的子字符串方法来创建填充字符串。
@echo off
setlocal enabledelayedexpansion
for /f %%a IN (test.txt) do (
set my_str=000000%%a
@echo !my_str:~-6!
)
最终结果echo'ed将是一个用零填充的六位数字。