powershellでパラメータ的な変数$_の下の項目を扱う方法

このQ&Aのポイント
  • powershellでパラメータ的な変数$_の下の項目を抜き出す方法を教えてください。
  • 特定の項目を1レコードずつ抜き出す方法を教えてください。
  • For-EachObjectコマンドを使用して$aaaの各レコードから特定の項目を抜き出すことができます。
回答を見る
  • ベストアンサー

powershell でパラメータ的な変数 $_ の下の項目を扱うには

powershell でパラメータ的な変数 $_ の下の項目を扱うには? $aaa = Get-ChildItem -Path "c:¥Program Files" この場合の $aaa を1レコードづつ回して、特定項目を抜き出す方法を教えてください。 $aaaを見てみると、 Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2010/06/30 12:00 Adobe d---- 2010/06/30 12:00 Hidemaru d---- 2010/06/30 12:00 Java d---- 2010/06/30 12:00 Lhaplus d---- 2010/06/30 12:00 Microsoft Office な感じです。 ここから、1レコード毎に個別に、またModeやNameの1項目毎に取り扱いたいです。 例えば あああ d---- Adobe あああ d---- Hidemaru あああ d---- Java あああ d---- Lhaplus あああ d---- Microsoft Office と出力したいとして、 ForEach-Object -InputObject $aaa -Process { echo "あああ"; echo ($_.Mode + " " + $_.Name) } というコマンドを打ってみましたが、うまく行きません。 一旦、シンプルに ForEach-Object -InputObject $aaa -Process { echo $_ } とすると、 Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2010/06/30 12:00 Adobe d---- 2010/06/30 12:00 Hidemaru d---- 2010/06/30 12:00 Java d---- 2010/06/30 12:00 Lhaplus d---- 2010/06/30 12:00 Microsoft Office と出力されました。 しかし、これは1件づつループしたのではなく、$aaaの塊が1回ドンと出てループはしていません。 ForEach-Object -InputObject $aaa -Process { echo "あああ"; echo $_ } と書いても、結果は あああ d---- 2010/06/30 12:00 Adobe あああ d---- 2010/06/30 12:00 Hidemaru あああ d---- 2010/06/30 12:00 Java あああ d---- 2010/06/30 12:00 Lhaplus あああ d---- 2010/06/30 12:00 Microsoft Office ではなく あああ d---- 2010/06/30 12:00 Adobe d---- 2010/06/30 12:00 Hidemaru d---- 2010/06/30 12:00 Java d---- 2010/06/30 12:00 Lhaplus d---- 2010/06/30 12:00 Microsoft Office です。 この場合の $aaa を1レコードづつ回して、特定項目を抜き出す方法を教えてください。

  • ngwave
  • お礼率65% (240/366)

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

$aaa | ForEach-Object 以下略 Get-Help ForEach-Object -examples でも見てください.

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

たぶん, -InputObject で指定するんじゃなくてパイプで送り込むんだと思う.

ngwave
質問者

補足

get-childItemから直接パイプで放り込むのは確かに出来ます。 実はそれは知っていました。 そうでなく、 オブジェクトとして一旦変数に避けた後、その変数の中身を取り出してどうのこうのする事はできるのかが知りたいです。

関連するQ&A

  • powershell で配列を順次に扱うには?

    powershell で配列を順次に扱うには? $aaa = Get-ChildItem -Path "c:¥Program Files" -name として、 $aaaにプログラムファイルズの下をオブジェクト形式で退避したとします。 $aaaを見てみると、 Adobe Hidemaru Java Lhaplus Microsoft Office などが入っています。 この$aaaをインプットとして、 ForEach-Object -InputObject $aaa -Process { echo ここに何を書けば良いですか? } アウトプットが下記のように$aaaの中身になれば良いです。 Adobe Hidemaru Java Lhaplus Microsoft Office ※このプログラム自体に意味はありません。 一旦退避したオブジェクトを順次に読むテストをしたいだけです。 これができたら、 -name オプションを外して、Mode,LastWriteTime,Length,Name をそれぞれ個別に echo してみたいです。

  • PHPによるアンケートの項目追加

    質問投稿させていただきます。 急遽仕事でPHPのアンケートの項目を追加することになったのですが PHPは全くの素人で困っています。 既存のアンケートに項目を追加したいのですが <h2>アンケートフォーム</h2> <form action="question2.php" method="post"> <dl class="clearfix"> <dt>性別は?</dt> <dd> <?php $male = '男性'; $female = '女性'; $number = array('1', '2'); echo ' <label><input type="radio" name="gender" value="' . $number[0] . '" />' . $male . '</label>' . "\n"; echo ' <label><input type="radio" name="gender" value="' . $number[1] . '" />' . $female . '</label>' . "\n"; ?> </dd> <dt>年齢は?</dt> <dd> <label> <select name="age"> <option value="0" selected="selected">選択してください</option> <?php for ($num = 1; $num <= 4; $num++) { echo ' <option value="' . $num . '">' . $num . '0代</option>' . "\n"; } ?> <option value="5">50代以上</option> </select> </label> </dd> <dt>趣味は?</dt> <dd class="hobby-area"> <?php $hobby = array(1 => '音楽鑑賞', 2 => '映画鑑賞', 3 => 'ドライブ', 4 => '旅行', 5 => 'その他'); foreach ($hobby as $key => $value) { echo ' <label><input type="checkbox" name="hobby[' . $key . ']" value="' . $key . '" />' . $value . '</label>' . "\n"; } ?> </dd> </dl> <p> <input type="submit" value="投票する" /> </p> </form> この文に <dt>趣味は?</dt> <dd class="hobby-area"> <?php $service = array(1 => 'あああ', 2 => 'あああ', 3 => 'あああ', 4 => 'あああ', 5 => 'あああ'); foreach ($service as $key => $value) { echo ' <label><input type="checkbox" name="service[' . $key . ']" value="' . $key . '" />' . $value . '</label>' . "\n"; } ?> </dd> </dl> このように項目を増やしたいのですがなぜか追加した項目の確認ページで Warning: Invalid argument supplied for foreach() in ~ と表示され echo '<dt>サービスは?</dt>'; echo '<dd>'; foreach ($service as $value) { switch ($value) { case 1: echo 'あああ<br />'; break; case 2: echo 'あああ<br />'; break; case 3: echo 'あああ<br />'; break; case 4: echo 'あああ<br />'; break; case 5: echo 'あああ<br />'; break; } } echo '</dd>'; この部分にエラーがあると表示されてしまいます。 これは$serviceに値がうまくいっていないということでしょうか? 素人の質問なので足りない処などあると思いますが よろしければ御回答ください。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • WPS3.0でのGet-childitemの挙動

    先日、Windows power shell 3.0をインストールし、バージョン2.0で利用していたスクリプトを実行したところ以前と挙動が変わり、目的の処理ができなくなってしまいました。 具体的には、カギ括弧"[]"が含まれるパスを対象に-Recurse付きでGet-childitemを実行した場合です。 例: > Get-ChildItem -LiteralPath 'E:\Test\[15-4]' -Recurse Get-ChildItem : 指定されたワイルドカード パターンは無効です: [15-4] 発生場所 行:1 文字:1 + Get-ChildItem -LiteralPath 'E:\Test\[15-4]' -Recurse + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Get-ChildItem], WildcardPatternException + FullyQualifiedErrorId : RuntimeException,Microsoft.PowerShell.Commands.GetChildItemCommand カギ括弧がワイルドカードとしてチェックが行われ、5以上4以下が指定されているのはおかしい、と言うエラーメッセージが出ているのだと思われます。 powershell.exe -version 2を実行して、環境をWindows power shell 2.0に切り替えてから同一のスクリプトを実行するとワイルドカード扱いとならず、期待通りの動作となります。 > Get-ChildItem -LiteralPath 'E:\Test\[15-4]' -Recurse ディレクトリ: E:\Test\[15-4] Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2012/09/13 20:02 a ディレクトリ: E:\Test\[15-4]\a Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2012/09/13 19:51 aa Windows power shell 3.0環境でも、次のケースではエラーになりません。 -Recurseが無い場合: Get-ChildItem -LiteralPath 'E:\Test\[15-4]' ディレクトリ: E:\Test\[15-4] Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2012/09/13 20:02 a -Recurseは有るが、カギ括弧の中の"-"直前・直後が前<後となっている場合: Get-ChildItem -LiteralPath 'E:\Test\[15-6]' -Recurse ディレクトリ: E:\Test\[15-6] Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2012/09/13 20:03 c ディレクトリ: E:\Test\[15-6]\c Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2012/09/13 19:51 cc 行いたいことは、下位フォルダを持っている(かもしれない)数十から数百のフォルダに対して、中身(フォルダ中のフォルダ数、.docなど特定種類のファイルの存在、下階層にフォルダしかない等)を判断し、フォルダの条件ごとに適切な場所にフォルダを移動、不要なものを削除する事です。 フォルダ名は変更できず、スクリプトも既に組んでいるので大きな変更を加えずに済むと助かります。 優先順に次の事柄を教えて頂けると助かります。 1.Windows power shell 3.0で”[15-4]”のような文字列を含むフォルダの下位階層のオブジェクトを取得する方法。 2.上記が困難な場合、Windows power shell 3.0をアンインストールせずに、デフォルトの実行環境をWindows power shell 2.0環境に固定する方法。 3.Windows power shell 3.0で上手くいかない理由。(バグ?、仕様変更?、本来の仕様に修正?) よろしくお願いします。

  • PowerShellでWord文書を開くには

    PowerShellでWordの文書を「読み取り専用」で開く方法を教えてください。 高校で情報処理検定試験用の教材を作っています。ワープロ検定の中に「速度」の試験があります。見本の文書をみて、10分間に何文字入力できるかを計ります。その演習で生徒が作成したWordのファイルを見本ファイルと比較して、一致した文字数と文字列を調べたいと思っています。文書の比較は「diff(Compare-Object)」を使います。diffの基本的なルゴリズムを参考にしてWordのマクロでは一致した文字数だけを調べることはできました。一致した文字列(誤字・脱字も)を求める方法をいろいろ調べていました。「diff」そのものが使えるといいのに気づきました。たまたま他のことで「PowerShell」の勉強を始めていたので、スクリプトでも可能ではないかと試行錯誤しています。800個ぐらいのファイルを処理したいので、ファイル毎に人手がかからないようにしたいと考えています。 まず、次のようなスクリプトを作りました。 $word = New-Object -ComObject word.application $word.visible = $true $doc = $word.Documents.Open($full_name ) #(1) #(2) $doc = $word.Documents.Open($full_name ,True,True) #(2) #(3) $doc = $word.Documents.Open FileName:=$full_name, ConfirmConversions:=True,ReadOnly:=True #(1) の場合、該当ファイルを開く際にポップメニューが開き、3つのボタンから「読み取り専用」を選ぶことができます。この確認を不要にしたいのですが、その方法が分かりません。 #(2)の場合、以下のようなエラーが出ます。 << 発生場所 D:\1情報マクロ\CountWordCharacters.ps1:33 文字:42 + $doc = $word.Documents.Open($full_name ,True,True) #(2) + ~ ',' の後に式が存在しません。 発生場所 D:\1情報マクロ\CountWordCharacters.ps1:33 文字:42 + $doc = $word.Documents.Open($full_name ,True,True) #(2) + ~~~~ 式またはステートメントのトークン 'True' を使用できません。 発生場所 D:\1情報マクロ\CountWordCharacters.ps1:33 文字:46 + $doc = $word.Documents.Open($full_name ,True,True) #(2) + ~ パラメーター一覧に引数が存在しません。 発生場所 D:\1情報マクロ\CountWordCharacters.ps1:30 文字:1 + { + ~ ステートメント ブロックまたは型定義に終わりの '}' が存在しません。 発生場所 D:\1情報マクロ\CountWordCharacters.ps1:33 文字:51 + $doc = $word.Documents.Open($full_name ,True,True) #(2) + ~ 式またはステートメントのトークン ')' を使用できません。 発生場所 D:\1情報マクロ\CountWordCharacters.ps1:49 文字:1 + } + ~ 式またはステートメントのトークン '}' を使用できません。 + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : MissingExpressionAfterToken >> #(3)の場合、以下のようなエラーが出ます。 << 発生場所 D:\1情報マクロ\CountWordCharacters.ps1:34 文字:29 + $doc = $word.Documents.Open FileName:=$full_name, ConfirmConversions: ... + ~~~~~~~~~~~~~~~~~~~~ 式またはステートメントのトークン 'FileName:=$full_name' を使用できません。 発生場所 D:\1情報マクロ\CountWordCharacters.ps1:34 文字:49 + $doc = $word.Documents.Open FileName:=$full_name, ConfirmConversions: ... + ~ パラメーター一覧に引数が存在しません。 + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : UnexpectedToken >> スクリプトを作る際、以下の資料を参考にしました。 (1)参考サイト Office | Dev Center ・・・>Word VBA リファレンス >オブジェクト モデル > Documents コレクション オブジェクト Documents.Open Method (Word) Office 2013 and later (2)参考書籍 「WindowsPowerShell ポケットリファレンス」改訂版 2015年7月1日初版 著者 牟田口 大介、出版社 技術評論社 (3)「うごかして学ぶWindowsPowwerShell」柏原 元基 kindle版 (4)「WindowsPowerShell超入門」【4.0対応】新丈 径 kindle版 PowerShellの勉強は始めて1週間ぐらい、Wordのマクロの勉強は6月からなのでほとんど知識がありませんので、よろしくお願いします。

  • PowerShellでのエラー

    半日たっても閲覧数0でしたので、タイトルとカテゴリーを変えました。 MBSAを用いてWindowsUpdateのオフライン適用に挑戦しています。 コマンドプロンプトで mbsacli.exe /xmlout /unicode /nd /nvc /catalog wsusscn2.cab > Updatecheck.xml により出力されたUpdatecheck.xmlの中身は <XMLOut> <CatalogInfo><CreationDate>2017-08-07T03:17:51Z</CreationDate></CatalogInfo> <Check ID="500" Grade="2" Type="5" Cat="1" Rank="1" Name="Developer Tools, Runtimes, and Redistributables のセキュリティ更新プログラム" URL1="Help/Check5311.html" URL2="Help/Check5311fix.html" GroupID="48ce8c86-6850-4f68-8e9d-7dc8535ced60" GroupName="Developer Tools, Runtimes, and Redistributables"><Advice>不足しているセキュリティ更新プログラムが 2 個あります。</Advice><Detail><UpdateData ID="MS11-025" GUID="bb49cc19-8847-4986-aa93-5e905421e55a" BulletinID="MS11-025" KBID="2538242" Type="1" IsInstalled="false" Severity="3" RestartRequired="false"><Title>Microsoft Visual C++ 2005 Service Pack 1 再頒布可能パッケージのセキュリティ更新プログラム (KB2538242)</Title><References><BulletinURL>http://www.microsoft.com/technet/security/bulletin/MS11-025.mspx</BulletinURL><InformationURL>http://go.microsoft.com/fwlink/?LinkId=216804</InformationURL><DownloadURL>http://download.windowsupdate.com/msdownload/update/software/secu/2011/06/vcredist_x86_b8fab0bb7f62a24ddfe77b19cd9a1451abd7b847.exe</DownloadURL></References></UpdateData><UpdateData ID="MS11-025" GUID="729a0dcb-df9e-4d02-b603-ed1aee074428" BulletinID="MS11-025" KBID="2538243" Type="1" IsInstalled="false" Severity="3" RestartRequired="false"><Title>Microsoft Visual C++ 2008 Service Pack 1 再頒布可能パッケージのセキュリティ更新プログラム (KB2538243)</Title><References><BulletinURL>http://www.microsoft.com/technet/security/bulletin/MS11-025.mspx</BulletinURL><InformationURL>http://go.microsoft.com/fwlink/?LinkId=216803</InformationURL><DownloadURL>http://download.windowsupdate.com/msdownload/update/software/secu/2011/05/vcredist_x64_a7c83077b8a28d409e36316d2d7321fa0ccdb7e8.exe</DownloadURL></References></UpdateData></Detail></Check> とずらずらと続いていっています。 これを読むのにExcelViewerのインストールはしたくないので linuxのxmltoを使おうとしました。 xmlファイルをutf8に変換後、 (最初"parser error : Input is not proper UTF-8, indicate encoding !"というメッセージが出たため) $ xmlto -o ./html_xml/ html Updatecheck_utf8.xml xmlto: /home/mess/Desktop/Updatecheck_utf8.xml does not validate (status 1) xmlto: Fix document syntax or use --skip-validation option /home/mess/Desktop/Updatecheck_utf8.xml:16: parser error : Specification mandate value for attribute teData teData ID="MS11-025" GUID="729a0dcb-df9e-4d02-b603-ed1aee074428" BulletinID="MS1 ^ <以下略> こんな感じでhtml変換に失敗します。 LibreOfficeCalcでメニューから「データ」、「xmlソース」を選択し ソースファイルでこのxmlファイルを選んでも「インポート」ボタンが暗いままで先に進めません。 ただ、結局やりたかったことは <DownloadURL> と </DownloadURL> に挟まれた部分を次々に抜き出していって、さらに行頭にwgetをつけて wget *ttp://download.windowsupdate.com/msdownload/update/software/secu/2011/06/vcredist_x86_b8fab0bb7f62a24ddfe77b19cd9a1451abd7b847.exe wget *ttp://download.windowsupdate.com/msdownload/update/software/secu/2011/05/vcredist_x64_a7c83077b8a28d409e36316d2d7321fa0ccdb7e8.exe (ここは最初の投稿時にサポート担当の方に編集されたようです) と続いていくスクリプトを自動生成したいということです。 ここまで書いた後、 http://dolls.orz.hm/?p=12070 http://dolls.orz.hm/?p=6166 にPowerShellを使ったやり方が書いてあるのに気づき、ここを参考にして管理者権限でPowerShellにおいて次の2行のコマンドを実行したのですが $xml = [XML](Get-Content Updatecheck.xml) $xml.XMLOut.Check.Detail.UpdateData | Where-Object {$_.IsInstalled.Contains("false")} | Select-Object {$_.References.DownloadURL} | Out-File downloadlist.txt> type .¥downloadlist.txt Out-File : パラメーター 'Encoding の引数を確認できません。引数 "type" は、ValidateSet 属性で指定されたセット "unicode、 utf7、utf8、utf32、ascii、bigendianunicode、default、oem" に属していません。このセットの引数を指定して、コマンドを再度 実行してください。 発生場所 行:1 文字:141 + $xml.XMLOut.Check.Detail.UpdateData | Where-Object {$_.IsInstalled.Contains("false")} | Select-Object {$_.References. DownloadURL} | Out-File <<<< downloadlist.txt> type .¥downloadlist.txt + CategoryInfo : InvalidData: (:) [Out-File]、ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.OutFileCommand 1行目は問題ないですが、2行目がご覧のようになります。 どのようにすればいいでしょうか? よろしくお願いします。

  • BASICか、C#か、C++で、こんな物を作りたい

    BASICか、C#か、C++で <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cab … width="300" height="300"><param name="movie" value="ここ"><param name="quality" value="high"><param name="wmode" value="transparent"><embed src="ここ" width="300" height="300" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download … type="application/x-shockwave-flash" wmode="transparent"></embed></object> 入力した文字を上の2つの「ここ」の部分にあてられたのもを生成ボタンで生成されそれをコピーするボタンがついていてそれをコピーできるソフトを作りたいのですが、詳しい作り方を教えてくれませんか?(ボタンの作製や入力欄の作成の方法とか、コードも。 ちなみに使っているソフトは、Microsoft Visual Basic 2010 Express、Microsoft Visual C# 2010 Express、Microsoft Visual C++ 2010 Expressです。 プログラミングについてあまり知らないのですがどうかお願いします。

  • SQLServer2005にてVIEWを作成したいのですが、どの様に結

    SQLServer2005にてVIEWを作成したいのですが、どの様に結合して良いのか分からないので教えて下さい。 下記「テーブルに登録されているデータ」で登録されているデータを下記「この様にVIEWで表示したい」の様にVIEWで出力する事は出来ますでしょうか? 出来るのであれば、結合方法の詳細かSQL文を教えて頂きたいと思います。 各SubNoは1~5と決まっています。 5に満たない場合は残りの項目はNULLとしたいです。 ▽テーブル詳細 MainNo Numeric(6,0) SubNo Numeric(1,0) Name Nvarchar(20) ▽テーブルに登録されているデータ MainNo, SubNo, Name 1, 1, 'TEST-A' 1, 2, 'TEST-B' 1, 3, 'TEST-C' 2, 1, 'CLASS-A' 2, 2, 'CLASS-B' 3, 1, 'OBJECT-A' 3, 2, 'OBJECT-B' 3, 3, 'OBJECT-C' 3, 4, 'OBJECT-D' 3, 5, 'OBJECT-E' ▽この様にVIEWで表示したい MainNo, SubNo1, Name1, SubNo2, Name2, SubNo3, Name3, SubNo4, Name4, SubNo5, Name5 1, 1, 'TEST-A', 2, 'TEST-B', 3, 'TEST-C', NULL, NULL, NULL, NULL 2, 1, 'CLASS-A', 2, 'CLASS-B', NULL, NULL, NULL, NULL, NULL, NULL 3, 1, 'OBJECT-A', 2, 'OBJECT-B', 3, 'OBJECT-C', 4, 'OBJECT-D', 5, 'OBJECT-E' 説明不足かも知れませんが、どなたか分かる方いらっしゃいましたらよろしくお願い致します。

  • $_POST受信で必要項目のみを結合したい

    1.a.htmlに入力フォームがあります。   フォームには、「苗字」「名前」「住所県」「住所県以下」の入力項目があります。 ==========入力内容========== 苗字      :斉藤        (input type="text" name="苗字") 名前      :祐樹        (input type="text" name="名前") 住所 県   :東京都       (input type="text" name="住所県") 住所 県以下:世田谷区・・・・   (input type="text" name="住所県以下") 性別: : :(他項目多数) ==========ここまで=========== 2.a.htmlから、test.phpにPOSTで内容を送信します。  a.htmlから受け取った内容をtest.phpにて以下ソースを利用し受信した内容を表示させたいと思います。 ==表示内容ソース== //1.一度格納。 foreach( $_POST as $key => $value ) {   $array[$key] = $value; } //2.格納配列表示 foreach( $array as $key => $value ) {   echo $key . ":" . $value. "<br>"; } ==========表示内容========== 苗字      :斉藤 名前      :祐樹 住所 県   :東京都 住所 県以下:世田谷区・・・・ : :(他項目多数) ==========ここまで=========== 3.表示内容を以下のように変更したいと思っております。   「苗字+名前⇒姓名」「住所県+住所県以下⇒住所」として出力したいと考えています。 ==========表示内容========== 姓名:斉藤祐樹 住所:東京都世田谷区… : :(他項目多数) ==========ここまで=========== 質問: 配列$array[$key]に格納時に、 ・「苗字と名前のkeyに対する内容(value:斉藤と祐樹)を結合し、新しく姓名(key)」:苗字+名前(value)を$array[$key]に格納したいと思っております。(上記3のようにしたい) また、結合に使用した、【苗字と名前】のkey、valueは不要のため破棄したいとも考えています。 考え)  $array['姓名']=斉藤祐樹; (もとは、$array['苗字']=斉藤、$array['名前']=祐樹、結合後は不要) 同じように、「住所県+住所県以下⇒住所」も結合し、格納したいと考えております。 $_POST取り出し時のforeachにどのようなコードを記述すれば、 思い通りの結果を得ることができますでしょうか? //取り出しforearch foreach( $_POST as $key => $value ) {   $array[$key] = $value; } ご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • ファイル書き込みが重複する

    こんばんわです。 以下のスクリプトで 投稿データを時系列に新しい書込み順に表示させようとしているのですが、一度実行させると同じ投稿がいくつも表示されてしまうのです。ご回答お願いいたします。一部省略しています。 <?php if($name== "" or $body == ""){ echo '<font color = "#FF000">必須項目入力エラー</font><br>'; echo 'お名前と本文は必ず入力してください<br>'; echo '<a href = "javascript:history.back()">戻る</a>'; } $body = substr($body, 0, 1000); $body = str_replace("\r\n", "<br>", $body); $dt = date("y/m/d H:i:s"); $data = file("data.txt"); $file = fopen("data.txt", "w"); fwrite($file, "$name\t$mail\t$body\t$dt\n"); $i = 1; foreach ($data as $value) { if($i < 30) { fwrite($file, "$value"); $i++; } } fclose($file); } echo ' subject03-BBS <h1>subject-BBS</h1> <form method="post" action="subject03.php" > お名前 <input type="text" size="20" maxlength="40" name="NAME"> メール <input type="text" size="30" maxlength="60" name="MAIL"> <p>本文<br></p> <textarea rows="20" cols="80" wrap="soft" name="BODY"></textarea> <p><input type="submit" name="SUBMIT" value="送信"><p/> </form> '; $data = file("data.txt"); foreach($data as $value){ $view = explode("\t",$value); if($mail== ""){ echo "お名前:$name$view[3]<br>"; } else{ echo "お名前:<a href=\"mailto:$mail\">$name</a>$view[3]<br>";} echo "本文:$body<br>"; } ?>

    • ベストアンサー
    • PHP
  • powershellの変数の扱い方

    cmdshell(bat)からpowershell(ps1)に移行しようと勉強しているものです。 ごく初歩的なことだと思うのですが、わからないので質問します。 環境はWindows8.1、PowerShell ISEを使用しています。 下記のように引数を実行ファイルに渡すと、渡したファイルが操作されます。 ------------------------------- D:\...\abc.exe $Args ------------------------------- これであれば正常に機能するのですが、 ------------------------------- $abc = "D:\...\abc.exe" $abc $Args ------------------------------- とするとエラーになってしまいます。 これは一体なぜなのでしょうか。 解決方法をご教授願いたいと思います。よろしくお願いします。

専門家に質問してみよう