2017-02-13 30 views
1

試圖將34/0/2填充兩位數字至34/0/02。我的代碼是 。 意見....?如何將零填入文件內容?

@echo off 
SETLOCAL enableDelayedExpansion 
FOR /F "tokens=1,2,3,4,5* delims=,/" %%a IN (temp1.csv) do (
    echo orig %%a/%%b/%%c,%%d,%%e 
    echo new %%a/%%b/%c:~-2%,%%d,%%e >> temp3.csv 
) 
type temp3.csv 

temp1.csv文件內容

Gi-34/0/1,lpu,w-3-016ch1swA1p19_lag 
Gi-34/0/10,lpu,w-3-018ch1swA2p19_lag 
Gi-34/0/11,lpu,prodca1_lan_sec 
Gi-34/0/12,lpu,prodca2_lan_sec 
Gi-34/0/13,lpd, 
Gi-34/0/14,lpd, 
Gi-34/0/15,lpd, 
Gi-34/0/16,lpd, 
Gi-34/0/17,lpd, 
Gi-34/0/18,lpu,aix_to_hmc 
Gi-34/0/19,lpu,prodcafl1_lan_sec 
Gi-34/0/2,lpu,w-3-016ch1swA2p19_lag 
Gi-34/0/20,lpu,prodcafl2_lan_sec 
+0

您必須分配%% C到環境變量第一。在這樣做的時候,在前面添加一個零,然後在輸出變量時拉出最後兩個位置。您將需要使用延遲擴展。 – Squashman

+1

存在2個錯誤:1.子字符串擴展語法不能用於'for'引用,所以您需要首先將其值分配給正常的環境變量;當這樣做時,請看[延期擴展](http://ss64.com/nt/delayedexpansion.html)! 2.從一位數字中提取子字符串不會創建額外的零,因此您必須提前添加前導零... – aschipfl

回答

2

它更容易在當前的內容添加到100,並採取最後兩位數字。 您引用了不存在的var %c%。爲了更好地區分我使用大寫字母var !C!和延遲擴展。只有3個變量,其餘的變量是tokens=1-3*

@echo off 
SETLOCAL enableDelayedExpansion 
Type Nul >temp3.csv 
FOR /F "tokens=1-3* delims=,/" %%a IN (temp1.csv) do (
    echo orig %%a/%%b/%%c,%%d 
    Set /A C=100 + %%c 
    echo new %%a/%%b/!C:~-2!,%%d >> temp3.csv 
) 
type temp3.csv 

輸出示例:

new Gi-34/0/01,lpu,w-3-016ch1swA1p19_lag 
new Gi-34/0/10,lpu,w-3-018ch1swA2p19_lag 
new Gi-34/0/11,lpu,prodca1_lan_sec 
new Gi-34/0/12,lpu,prodca2_lan_sec 
new Gi-34/0/13,lpd, 
new Gi-34/0/14,lpd, 
new Gi-34/0/15,lpd, 
new Gi-34/0/16,lpd, 
new Gi-34/0/17,lpd, 
new Gi-34/0/18,lpu,aix_to_hmc 
new Gi-34/0/19,lpu,prodcafl1_lan_sec 
new Gi-34/0/02,lpu,w-3-016ch1swA2p19_lag 
new Gi-34/0/20,lpu,prodcafl2_lan_sec