2017-02-13 7 views
1

34/0/2を2桁の34/0/02にパディングしようとしています。 私のコード。 提案...?ファイル内容に0を埋め込む方法は?

@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を割り当てる必要があります。これを行うときに、フロントにゼロを追加し、変数を出力するときに最後の2つの位置を引きます。遅延拡張を使用する必要があります。 – Squashman

+1

2つのエラーがあります。1.サブ文字列展開構文を 'for'リファレンスで使用することはできません。そのため、最初に通常の環境変数にその値を割り当てる必要があります。そうするときは、[遅延拡張](http://ss64.com/nt/delayedexpansion.html)を見てください! 2. 1桁の数字からサブストリングを抽出しても、追加のゼロは作成されないので、先行するゼロを前もって追加する必要があります。 – aschipfl

答えて

2

それは100に現在のコンテンツを追加し、最後の2桁の数字を取るために簡単です。 存在しなかった変数%c%を参照しました。よりよく区別するために、私は大文字の!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 
関連する問題