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

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

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

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

Q&A

解決済

1回答

14881閲覧

日付の形式ではない場合に再入力を促すやり方

_rm_

総合スコア8

PowerShell

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

1グッド

0クリップ

投稿2018/03/22 12:45

当方数日前にPowerShellを初め、調べながら作成しております。

##聞きたいこと
1.日付の形式にするために桁数で判断して"/"(スラッシュ)や"-"(ハイフン)等を入れないといけないはずだが
他の簡単なやり方や便利なコマンド等があったら知りたい。。

2.関数の使い方が誤っていないか心配

##やりたいこと

1.ハイフンなしで日付を入力(文字型)
2.日付の形式ではない場合はエラーメッセージを出力し、再入力を求める

下記入力パターンあり
---1.年月
---2.年月日
---3.年月日時
---4.年月日時分

※ネットから拾ってきた日付のチェックをする関数を引用してます。
他にも何か良いやり方等ありましたらご教示ください。

powersehell

1function IsDate([string]$check_date) 2{ 3 try 4 { 5 [Datetime]::Parse($check_date) 6 return '1' 7 } 8 catch 9 { 10 return '0' 11 } 12} 13 14$ChkFlg_from = '0' 15 16while( $ChkFlg_from -eq '0'){ 17 18 $Str_fromDay = (Read-Host '出力対象年月日(From)の入力(YYYYMMDDhhmm)') 19 20#### ここで日付形式に変換? 21 22 $ChkFlg_from = ISDate $Str_fromDay 23 24 } 25 26 27

聞ける人も周りにおらず作成しておりまして、
お助け下さい。。。

rm_👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

対応したいパターンが決まっているとのことなのでDateTime.TryParseExact メソッド (System)を使うのが良いと思います。

サンプル

ps1

1# 入力文字列 2[string]$userInputDate = '1803' 3 4 5# 対応する入力パターン 6[string[]]$dateFormats = @( 7 'yyMM' 8 'yyyyMM' 9) 10 11# 適当な値で初期化 12[datetime]$parsedDate = [datetime]::MinValue 13 14# 変換して $parsedDate へ。失敗したら $parseSuccess が $false。 15[bool]$parseSuccess = [datetime]::TryParseExact( 16 $userInputDate, 17 $dateFormats, 18 [Globalization.DateTimeFormatInfo]::CurrentInfo, 19 [Globalization.DateTimeStyles]::AllowWhiteSpaces, 20 [ref]$parsedDate 21 ) 22 23if ($parseSuccess) { 24 Write-Host ('Parse success. input = {0}' -f $userInputDate) 25 $parsedDate 26} else { 27 Write-Host ('Parse fail. input = {0}' -f $userInputDate) 28}

その他気になったこと。

一般的な話

単純な成功・失敗を表すなら真偽値、PowerShellならbool型($true/$false)を使いましょう。

列挙型などが使えない言語なら整数や文字列で返すこともありますが、数字の文字列というのは中途半端で扱いにくいです。

PowerShell特有の話

PowerShellでは、関数内でパイプラインに出力された値全てを関数の結果として返します。
returnはあくまで処理を打ち切るためだけのものです。

質問のIsDate関数の場合、失敗したときは'0'
成功したときは変換されたdatetime型と'1'の入った配列が返されます。

投稿2018/03/22 13:30

imihito

総合スコア2166

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

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

_rm_

2018/03/25 06:13

わかりやすくありがとうございます! ご教授いただいた後に色々と関数つかってやってみて理解できました。 またわからなくなった場合、ご質問させて頂きますので その際はよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問