2015-08-20 87 views
0

我已經嘗試過,以便在早上更好的部分進行排序。如何將前導零的數字填充到固定長度?

它實際上是同一個問題,因爲這一個從2013年開始,到沒有人回答說:

batch script with FOR does not work

我會盡我所能來格式化代碼,這樣就很容易跟進,也許我會得到一個答案......

我從我們的服務檯售票系統做一個歸檔項目。 爲了分類目的,這些文件將包含票號和日期​​。

然而,票號的長度變化。爲了解決這個問題,所有票號都是6位數字,較短的數字用前面的零填充(即1234變成0)。

我可以拿到票號,但我需要找到它的長度知道有多少個零添加。

這工作:

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循環失敗?

我該如何讓它起作用?

+1

在FOR循環中,你總是會遇到困難。 – RGuggisberg

回答

0

批處理腳本做你所描述的正是:閱讀大量文件的第一行(在你的情況下,只有一個文件),並確定第一線的長度。即你得到了for循環的內部錯誤。

我不知道正確的解決辦法,但我認爲這個頁面可能是對你有所幫助:

http://ss64.com/nt/for_f.html

我希望幫助。

+0

是的,我知道這個在線參考並經常使用它。你是什​​麼意思「你得到了你的循環的內部錯誤」? TEST.TXT有10行每個字符串,FOR/F應該讀取每行,我應該得到10行說「該字符串是%長度%字符長」 – jmsallo

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將是一個六位數字,用左填充零。

+0

您是正確的重新:XY。幸運的是,我確實以足夠的細節描述了我需要的東西,以至於您給了我一個解決方案。謝謝! – jmsallo

4
  1. 你不需要知道票號字符串的長度(當你能保證它不會超過6個字符),你可以前綴5個零和分裂的最後6個字符,則:

    set my_str=12345 
    
    set my_str=00000%my_str% 
    set my_str=%my_str:~-6% 
    
    echo %my_str% 
    

    如果您還想獲取字符串長度,請參閱this post

  2. 不能在for體內使用gotogotofor循環背景。但是,您可以在for範圍內使用call子程序,該子程序又可能包含goto

+0

感謝您對第二點的看法......我想 - 那些記錄在某處! – jmsallo

+1

點#1也是你的填充問題的解決方案。在循環中需要'Delayedexpansion'來應用它。 – foxidrive