質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

2回答

9677閲覧

Powershellにてstringの変数の特定の部分を取り出したい。

退会済みユーザー

退会済みユーザー

総合スコア0

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2017/01/16 07:03

編集2017/01/16 07:28

####やりたいこと
現在Powershellでパスワードの一覧表のテキストを読み込み指定された部分(使用する箇所)をクリップボードにコピーするというスクリプトを作成中です。

####問題点
今のところ現在の日付からファイル名を特定し読み込むというところまでできたのですが読み込んだテキストの指定した部分のみを抜き出すという部分がうまく実現できず詰まっています。
スクリプトに合わせてすべて1行になっているので場所の指定は簡単にできるのですが、その方法が調べてみてもよくわかりませんでした。

####パスワード一覧の形式
【ファイル名の形式】
パスワード表は1年に2回、4月と10月に更新されます(上期と下期の最初に更新)
上期のパスワードファイル名にはその年の先頭に0を、下期の場合は1をつける形式にしています。

【パスワードの形式】
テキストファイルの中身は縦8行、横20列の2次元の表となっていたものを
今回のスクリプトで扱いやすいようすべてを改行などを含まない1行で記載されています。

【パスワードの指定方法】
パスワードの指定は、カンマ区切りで
「ローマ字,数字,数字」
の形式で入力させ、ローマ字で行を指定(8行なのでA~Hまで)、1つ目の数字でその行の何文字目からスタートするか、2つ目の数字でスタートから何文字コピーするか。の範囲を指定します。

####現在のコード

#コピーするパスワードの場所を入力 $input = Read-Host "コピーするパスワードをカンマ区切りで入力してください 例:A,1,8" $input2 = $input.split(",") #passwordfileのあるフォルダへ移動 $path = "C:\..\..\Password表" Write-Host $path Set-Location $path #上半期、下半期の判定(0=上半期,1=下半期) $month = Get-Date -F "MM" Write-Host $month if(([int]$month -ge 4) -and ([int]$month -le 9)){ $period = 0 }else{ $period = 1 } #$period+西暦下二桁でファイル名を決定 $year = Get-Date -F "yyyy" #1~3月は西暦を-1 if([int]$month -le 3){ $year -= 1 } $filename = [string]$period + [string]$year $filename += ".txt" Write-Host $filename $pass = Get-Content $filename Write-Host $pass

####追記
パスワード表のサンプルを記載します。
元々は、

1 2 3 4 5 6 7 8 9 0 A xxxxxxxxxxxxxxxxxxxx B xxxxxxxxxxxxxxxxxxxx C xxxxxxxxxxxxxxxxxxxx D xxxxxxxxxxxxxxxxxxxx E xxxxxxxxxxxxxxxxxxxx F xxxxxxxxxxxxxxxxxxxx G xxxxxxxxxxxxxxxxxxxx H xxxxxxxxxxxxxxxxxxxx

これをそのままテキストファイルに記載されており使用するたびにファイルを開いて指定箇所をコピーしていました。
それを今回のスクリプトに合わせて縦のアルファベットと横の1~0の数字を消しすべて1行でテキストに記載されています。

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...

このファイルを読み込み、例えばスクリプトの最初で「B,1,8」が指定されると
B列の1文字目から8文字を使用する。ということです。

また記載を忘れていましたが行は2文字で1セットなので指定できるのは1~0のみです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2017/01/16 07:12 編集

【パスワードの形式】 がよくわかりません。列とはなんですか?カンマ区切りで入っているのでしょうか?それとも単にANK文字が20個連続しているだけでしょうか? サンプルを質問に記載ください。
退会済みユーザー

退会済みユーザー

2017/01/16 07:28

追記いたしました
guest

回答2

0

Powershell

1$input = Read-Host "コピーするパスワードをカンマ区切りで入力してください 例:A,1,8" 2$input2 = $input.split(",")

エラーが出るとおもうのですが。。。

PS > $input = Read-Host "コピーするパスワードをカンマ区切りで入力してください 例:A,1,8"
コピーするパスワードをカンマ区切りで入力してください 例:A,1,8: C,A,B
PS > $input2 = $input.split(",")
[System.Collections.ArrayList+ArrayListEnumeratorSimple] に 'split' という名前のメソッドが含まれないため、メソッドの呼び出しに失敗しました。

$inputは変数として使用できません。別の変数名を使用してください。
(パイプラインから渡されたオブジェクト群にアクセスする特殊な変数として $inputは定義済みです。)

投稿2017/01/16 08:04

Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/01/17 06:11 編集

今普通に動いています。 Windows7です
guest

0

ベストアンサー

substringを利用すれば良いのではないでしょうか。

投稿2017/01/16 07:36

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/01/16 07:41

やりたかったことそのままのメソッドでした。ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問