2017-07-21 16 views
0

に(パイプ区切り)。シェルスクリプトをpowershellに変換したい。ファイル読み取りライン・バイ・ライン/フィールド・バイ・フィールド実際PowerShellで初心者のPowerShell

私は3行が含まれていsample.txtファイルを持っています。私は、異なる変数に並んでいる各単語を選択し、次のif条件でどの変数を使用する必要があるのですか。

grep "^[^#]" ./sample.txt > test.txt 

for line in `cat test.txt` 
do 
    dir=`echo $line | cut -d'|' -f1` 
    metadata_name=`echo $line | cut -d'|' -f2` 
    metadata_file=`echo $line | cut -d'|' -f3` 
    config_file=`echo $line | cut -d'|' -f4` 

    if [ "${config_file}" != "" ] 
    then 
cp ${dir}.xml folder1/. 

のPowerShellにシェルを変換する方法を、私を助けてください:

get-content sample.txt 
wordone|secondword|thridword|fourthword 
wordone1|secondword1|thridword1|fourthword1 
wordone2|secondword2|thridword2|fourthword2 

は、私はすでにシェルスクリプトを持っています。

+0

-WhatIfパラメータを削除し、[適切にあなたのコードとサンプルの入力/出力をフォーマット]にしてください(のhttp:/ /meta.stackexchange.com/a/22189/248777)。 – mklement0

+0

私はPowerShellと話すことはできませんが、オリジナルのbashスクリプトは実際には非効率でバグが多いです。 'IFS = '|' read -r dir metadata_nameメタデータファイルconfig_file; -n "$ config_file" && cp - "$ dir.xml"フォルダ1をテストします。 ( 'cat'と' cut'を外部で呼び出すのではなく、シェル自体に組み込まれたコマンドだけを使って、サブシェルを取り除く必要はありません)しかしかなり正確です。 –

+0

bashでファイルを正しく読み込む方法については、[BashFAQ#1](http://mywiki.wooledge.org/BashFAQ/001)を参照してください。実際には、他のコマンドの出力を読み込むことなく*読み込みと解析をネイティブに行うことで、おそらくPowerShellで何か似たようなことをすることができるでしょう。 –

答えて

0

これはあなたが探しているものですか?

$textfile = get-content "sample.txt" 
$sample = "sample.txt" 


for ($i=0;$i -lt $textfile.count;$i++){ 
    $textrow = ($textfile[$i]).split("|") 

    $dir = $textrow[0] 
    $metadata_name = $textrow[1] 
    $metadata_file = $textrow[2] 
    $config_file = $textrow[3] 

    If($config_file -ne ""){ 
     New-Item $dir/ConfigurationPlan -type directory -force 
     $sample | Out-File "$dir/ConfigurationPlan/$($config_file)_sample.xml" 
    } 

} 
+0

ありがとうございます。それは私のために働いています。もう一つ必要なのは、コピー –

+0

全体のパス構造をシェルスクリプトのようなBuildディレクトリにコピーすることです。新あれば実際に私が他のフォルダに同じA/B/Cの構造をコピーしたいのPowerShell CP --parents -r $ {変数1}/ConfigurationPlan/$ {varaible4} _sample} .xmlのPWD/ –

+0

番号を構築中で可能な方法を提案して下さい$ {config_file} "!=" "] \t \t cp --parents -r $ {dir}/ConfigurationPlan/$ {config_file} _env.xml現在の作業ディレクトリ/ビルド $ {ANT_HOME}/bin/ant - Fの$ {​​ORACLE_HOME} /soa/bin/ant-b2b-util.xml b2bconfig -Dmode = publishandimport -Dexportfile = "presentworkingdirectory /アーティファクト/ $ {DIR}/$ {metadata_file}" -Dconfigplan = "presentworkingdirectory /アーティファクト/ $ { DIR}/ConfigurationPlan/$ {} CONFIG_FILE _env.xml」-Dgeneratedexportfile = "presentworkingdirectory /ビルドします/ $ {DIR} /トークン化_ $ {} metadata_file他に" –

0

私は、CSVファイルとして.\sample.txtファイルを扱い、-Delimiter '|'-Header dir,metadata_name,metadata_file,config_fileパラメータでインポート、CSVを使用すると思います。
次に、行を繰り返してdirをチェックし、コピーするファイルが存在することを確認します。

$Sample = Import-Csv sample.txt -delimiter '|' -Header dir,metadata_name,metadata_file,config_file 
$Sample 
"----" 
ForEach ($Line in $Sample){ 
    if ($Line.config_file -ne ""){ 
     $File = "$($line.dir).xml" 
     "config_file is $($Line.config_file) checking $File" 
     if (Test-Path $File){ 
      Copy-ITem -Path $File -Destination "folder1\" -whatif 
     } 
    } 
} 

出力例:

> Q:\Test\2017\07\21\SO_45239319.ps1 

dir  metadata_name metadata_file config_file 
---  ------------- ------------- ----------- 
wordone secondword thridword  fourthword 
wordone1 secondword1 thridword1 fourthword1 
wordone2 secondword2 thridword2 fourthword2 
---- 
config_file is fourthword checking wordone.xml 
config_file is fourthword1 checking wordone1.xml 
config_file is fourthword2 checking wordone2.xml 

あなたの出力がOKに見える場合は、コピー-項目

関連する問題