1 名前:デフォルトの名無しさん mailto:sage [2016/11/26(土) 06:30:02.67 ID:pZYy6q7Y.net] 前スレ 【最強CUI】PowerShell -Part 1 echo.2ch.net/test/read.cgi/tech/1378978504/
601 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 22:04:18.45 ID:E9oZl2pC.net] pushd/popd 便利やなあ わしゃずっとcd使っとったぞい
602 名前:デフォルトの名無しさん [2018/03/05(月) 05:26:47.07 ID:ZV3N5zu0.net] >>575 わたしゃ多用してますわ push-location pop-location と省略せずにつかっておりますです
603 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 18:11:54.95 ID:QwFmEXbL.net] c# scriptingのほうが楽とちゃうか? ネイティヴコマンド連携だけは若干ps有利かなといった印象
604 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 20:17:46.87 ID:Xwb93uOm.net] その時々で都合の良いほうを使えばいいよ 同じ.NETなんだから否定する理由も無い
605 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 07:41:36.43 ID:E7Qx2uww.net] >>578 あ、議論から逃げたw
606 名前:デフォルトの名無しさん [2018/03/07(水) 07:47:27.99 ID:Bp6mjckS.net] >>577 C# scriptingその後の話題が無いところをみると どうも今一つなんかな
607 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 21:20:29.09 ID:6bAELGui.net] >>577 シェルのlsやらcatやらみたいなのもc# scriptingのほうが楽なの?
608 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 00:59:56.29 ID:D0NacyLc.net] bashとかが駄目な理由に、bashで書きづらくても、そこからpythonとか他の言語にするなら全部書き直しになる
609 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 01:13:22.32 ID:uJW9EWjF.net] CLIが嬉しいと言いたいのかな。ちょっと論旨が理解できないが。
610 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 04:26:04.35 ID:OsiEjbqp.net] script vs shell scriptとか何十年前の話題だよ 進歩のない連中だ
611 名前:デフォルトの名無しさん [2018/03/15(木) 06:42:05.85 ID:D4RVJiAa.net] OSのシェルとプログラミング言語の区別がない人間ばかりだから仕方ない。
612 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 12:26:16.83 ID:Vp0MsA86.net] シェルスクリプトをどちらかに分類したがるのは無理なのでは。
613 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 15:36:12.78 ID:BVhm+pK4.net] basicはどっちなん?
614 名前:デフォルトの名無しさん [2018/03/15(木) 16:51:24.16 ID:2jkAdz6t.net] 単に、UNIXなどで単機能インタープリターをシェルと 呼び始めたんで、シェルは別物と思う人たちが出てきて しまっただけ。
615 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 22:19:45.69 ID:NI14hTsx.net] OSのシステムコールとプログラミング言語の区別がない人間も多い
616 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 08:54:28.41 ID:T21mXgK0.net] システムコールとライブラリ関数 http://
617 名前:jibun.atmarkit.co.jp/lskill01/rensai/fulinux/02/01.html システムコールとライブラリ関数の区別は曖昧で、 昔はシステムコールだった手続きも今はライブラリ関数として実装されていることがありますし、その逆もあります。 そういった意味では、システムコールとライブラリ関数の違いを本気で意識しなければならないのは カーネルや基幹ライブラリを書くプログラマくらいと言えるかもしれません。 システムコールとライブラリ関数の違いが実際に役に立つのは、manページを参照するときです。 例えば「printf」にはコマンドのprintfとライブラリ関数のprintfがあるので、 ライブラリ関数のprintfの解説が見たければ「man 3 printf」と入力しないといけません。 「write」にはコマンドのwriteとシステムコールのwriteがあるので、 システムコールのほうが読みたければ「man 2 write」と入力しないといけません。 [] [ここ壊れてます]
618 名前:デフォルトの名無しさん [2018/03/17(土) 11:59:28.36 ID:4+yOSMEm.net] >>586 おまえはシェルがシェルスクリプトだと思っているのか?
619 名前:デフォルトの名無しさん [2018/03/17(土) 12:01:46.42 ID:4+yOSMEm.net] シェル用のスクリプトだからシェルスクリプトなのに。
620 名前:デフォルトの名無しさん mailto:sage [2018/03/17(土) 16:54:33.86 ID:gmKtMsY0.net] 史上嘗て無い頭の悪そうな突っ込み
621 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 11:12:47.74 ID:yOhpRYak.net] ps coreイイね
622 名前:デフォルトの名無しさん [2018/03/21(水) 12:31:30.05 ID:U1NUu6zm.net] >>594 そっすか
623 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 12:38:11.67 ID:sjE01Nui.net] powershell_ise coreとかあったら良いのに と思ったけど流石に需要ないか
624 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 12:51:05.01 ID:kSqnsZIp.net] >>596 俺も欲しい vscodeでも出来るけど、捨てコード書くには面倒なんだよね
625 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 00:18:59.44 ID:tdHViWJs.net] VSCode の、Code Runner ソースコードの範囲を選択して、実行できる これは、便利なプラグイン!
626 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 00:26:12.80 ID:2RoYBMkH.net] >>598 それ入れてないけど、範囲選択+F8で部分実行できたぞ 多分バージョンアップで不要になったプラグインだね
627 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 01:00:47.33 ID:arhMS6Ve.net] 部分実行できる言語もあるしできない言語もある 対象言語にも触れず「これは便利!」っつってる>>598 もアホだし、対象言語もわかってないのに「バージョンアップで不要になったプラグイン」っつってる>>599 もアホ
628 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 01:18:02.22 ID:2RoYBMkH.net] スレタイも読んでない600が一番アホでは?
629 名前:598 [2018/03/22(木) 04:55:52.14 ID:tdHViWJs.net] VSCode の、Code Runner ソースコードの範囲を選択して、右クリックメニューから実行できる 便利なプラグイン! PowerShell にも対応している
630 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 06:41:35.55 ID:G0SZ4nh0.net] 宣伝
631 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 09:35:21.60 ID:9NxgdLlD.net] powershell coreでNuGetパッケージを使いたい場合ってどうすればいいの Dapperを使う時にC#だったらdotnet add package Dapper; dotnet restoreだけどpowershellプロジェクトだとどうするのかな
632 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 17:30:21.30 ID:rN4AhykW.net] dotnet add package Dapper dotnet restore --packages ./packages Add-Type $source -ReferencedAssemblies netstandard, ./packages/.../Dapper.dll これでできたわ お前らまじで使えねえなー
633 名前:デフォルトの名無しさん mailto:sage [2018/03/26(月) 07:20:39.22 ID:90OCo3hj.net] すみません。。
634 名前:デフォルトの名無しさん [2018/03/28(水) 21:08:11.49 ID:rexEOFUm.net] とあるフォルダ配下にあるテキストファイルだけ抽出して配列に格納 別のフォルダ配下にあるテキストファイルだけ抽出して配列に格納し配列同士を比較して同じファイルのみを抜き出してCompare-Objectで比較したいんですけどどうやったらできますか?
635 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 22:43:30.34 ID:WBaBvJPO.net] >>607 $a = ls "フォルダ1" *.txt $b = ls "フォルダ2" *.txt $a + $b | group name | where count -eq 2 | foreach { $_.name; compare (gc $_.group[0] .fullname) (gc $_.group[1].fullname) | ft }
636 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 01:53:06.95 ID:0KWZ/AkQ.net] >>608 >gc $_.group[0] .fullname .fullname の前に、半角空白が入っているから、エラーになる
637 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 04:02:59.38 ID:63+/4se6.net] >>608 似たようなことよくやるが、やっぱ癖が出るね 自分なら最初こうやるかな @( Get-ChildItem "フォルダ1" *.txt Get-ChildItem "フォルダ2" *.txt )| 変数あまり使いたくないし、lsは動作がUNIXとは違うから紛らわしくて
638 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 07:16:54.73 ID:V1TivHhi.net] >>609 ありゃconemuだと折返し部分に勝手にスペース入っちゃうんだな >>610 そのへんは好みだとしてもそれ見て気づいたけどファイルが一つしかなくて$aが配列じゃない場合 $a + $b だとエラーになるね @($a; $b) とすべきだったか
639 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 07:57:32.30 ID:0KWZ/AkQ.net] 1つか複数かで、オブジェクトの型が違うのか ややこしい言語やな
640 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:10:52.44 ID:ZJ5ir4HC.net] そういう細かい変な挙動がめんどくさいからC#で書いてAdd-Typeしてるわ Linqあれば大抵の処理はPowerShellより書きやすいし読みやすい
641 名前:デフォルトの名無しさん [2018/03/29(木) 21:42:00.78 ID:QJhSKNI2.net] >>608 ありがとうございます これやったんですけどcountのところで型エラーになっちゃいました >>610 >>611でもダメみたいです
642 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 22:03:31.09 ID:AdhamQsX.net] & { ls foo ls bar }
643 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 22:51:24.43 ID:V1TivHhi.net] >>614 powershellのバージョンは? 古いのはよくわからんけど Group-Object -Property Name とかしたらできるんかね
644 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 22:57:06.82 ID:V1TivHhi.net] もしpowershell2ならこれなら動くんじゃないかな、試してないけど @($a; $b) | Group-Object -Property Name | Where-Object { $_.Count -eq 2 } | Foreach-Object { $_.Name; Compare-Object -ReferenceObject $(Get-Content $_.Group[0].Fullname) -DifferenceObject $(Get-Content $_.Group[1].Fullname) | Format-Table }
645 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 23:14:54.79 ID:cCEUqbyZ.net] >>616 バージョンこんな感じです > $PSVersionTable Name Value ---- ----- CLRVersion 2.0.50727.8762 BuildVersion 6.1.7601.17514 PSVersion 2.0 WSManStackVersion 2.0 PSCompatibleVersions {1.0, 2.0} SerializationVersion 1.1.0.1 PSRemotingProtocolVersion 2.1
646 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 23:18:05.53 ID:cCEUqbyZ.net] >>617 やると↓ $a=Get-ChildItem "D:\test\*.*" -include *.txt,*.dat $b=Get-ChildItem "G:\test\*.*" -include *.txt,*.dat @($a; $b) | Group-Object -Property Name | Where-Object { $_.Count -eq 2 } | Foreach-Object { $_.Name; ompare-Object -ReferenceObject $(Get-Content $_.Group[0].Fullname) -DifferenceObject $(Get-Content $_.Group[1].Fullname | Format-Table } b.txt Compare-Object : 引数が null であるため、パラメーター 'ReferenceObject' にバインドできません。 発生場所 行:1 文字:134 + @($a; $b) | Group-Object -Property Name | Where-Object { $_.Count -eq 2 } | Foreach-Object { $_.Name; Compare-Object -ReferenceObject <<<< $(Get-Content $_.Group[0].Fullname) -DifferenceObject $(Get-Content $_.Group[1].Fullname) | Form at-Table } + CategoryInfo : InvalidData: (:) [Compare-Object]、ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.CompareObje ctCommand
647 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 23:45:57.68 ID:V1TivHhi.net] それ単に空ファイルだからでしょ
648 名前:デフォルトの名無しさん [2018/03/29(木) 23:54:26.21 ID:cCEUqbyZ.net] >>620 空ファイルとの差分も比較したいっす
649 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 00:15:02.11 ID:8/UdoTgk.net] -ReferenceObject $(if ($_.Group[0].Length -eq 0) {"空ファイル"} else {Get-Content $_.Group[0].Fullname}) とかすればいい-DifferenceObjectも同様に
650 名前:デフォルトの名無しさん [2018/03/30(金) 00:55:45.74 ID:1oIUHR4g.net] >>622 おお!なんか求めてるものができました ありがとうございます
651 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 12:24:41.58 ID:87KFZNYL.net] PSVersion 2.0 って、古いな 漏れは、Windows10 で、5.1
652 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 12:46:33.65 ID:MnRWcQoL.net] >>624 > PSVersion 2.0 って、古いな Windows 7 の標準装備だから会社によっては今でもその縛りがあるところは珍しくない
653 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 13:31:52.36 ID:CA1T1+Qn.net] むしろwin10なのに5.1は古い 6.01入れちまえ
654 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 15:57:34.95 ID:BIk3pBCX.net] 標準で入ってるから使うんであって わざわざ入れるなんて許されない それがPowershellの掟
655 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 16:03:03.73 ID:GA8gSqY/.net] 常時最新版は入れるけど開発は2.0で
656 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 23:23:41.80 ID:v3STFQKk.net] 個人で使う分にはいいんだろうけどね
657 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:12:34.80 ID:9aphfiP0.net] 2.0でも問題ないように勉強しつつ、案件が始まったら最新版のインストールを駄目元でお願いする感じ
658 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:41:50.71 ID:PackIPAm.net] いつの間にか6.0.2がリリースされてた https://github.com/PowerShell/PowerShell/releases/tag/v6.0.2
659 名前:デフォルトの名無しさん [2018/03/31(土) 20:24:07.76 ID:xiXxh7KM.net] ファイルの最後の文字のみ読み込んで 例えば最後の文字が 〇〇てすと だったら てすと に置換して元から"てすと"だったそのままにしたいんだけどどうすればできますか? ただし最終行が"てすと"じゃなかった場合は"てすと"を追記したいです 個人的にはループ処理で最終行から読み込んで意図した文字列なら置換って事がやれればいいと思ってます ※バージョンは2.0でお願いします!
660 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 23:42:23.39 ID:ZBdPbw02.net] Ruby で作った text = File.read ARGV[0] # 引数はファイル名 ary = [] # 文字列を1行ずつ、配列に入れる text.each_line{ |line| ary << line } p ary # 戻り値は、置換が行われたときはレシーバ自身、置換されなかったときはnil if ary[-1].sub!(/〇〇てすと$/, 'てすと') # 処理なし。レシーバ自身を変更する elsif /てすと$/ !~ ary[-1] # てすと で終わらない ary[-1] += 'てすと' else return end p ary[-1] File.write(ARGV[0], ary.join)
661 名前:デフォルトの名無しさん [2018/03/31(土) 23:55:40.86 ID:jgzyYqDp.net] >>633 ここPowershellスレなんだが…
662 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 00:05:46.07 ID:QUrQa6Zt.net] >632をなんとなく作ってみたんですけど、 最後に出力された文字列だけを置換しての部分がうまくいかない 置換自体は出来るんだけどその部分だけ文字列に書き込む方法が分からん。。。 (Get-Content D:\test\a.txt)[(Get-Content D:\test\a.txt).length..0] | Foreach-Object { if( $_.length ){ if(!($_ -like "*てすと*")){ Add-Content -Path D:\test\a.txt -Value "てすと" break } $_ -replace ".*てすと.*", "てすと" break} }
663 名前:633 mailto:sage [2018/04/01(日) 00:36:26.53 ID:ECJY99tL.net] >その部分だけ、文字列に書き込む方法が分からん Ruby でも、ファイルを読み書き両用で開くと、 現在のシーク位置を、あれこれ移動しないといけないから、非常にややこしい。 シーク位置を変数に入れておいて、あれこれ考えるのは、ややこしい だから、テキスト全体を改行区切りの配列に入れて、最後の行だけを変更してから、 全部を書き込む方が簡単 633 では、そうしている
664 名前:デフォルトの名無しさん [2018/04/01(日) 01:17:13.74 ID:XTr+hbom.net] 趣旨に合っているかな? $list=Get-Content sample.txt $text="てすと" foreach($line in $list){ if([string]::IsNullOrEmpty($line)){$line=$text} $str=$line.Substring($line.length-3) if($str -eq $text){ $newline=$str} else{ $newline=$line } $newline }
665 名前:637 [2018/04/01(日) 01:18:30.22 ID:XTr+hbom.net] 最後の行についてわすれてた
666 名前:637 [2018/04/01(日) 01:28:26.15 ID:XTr+hbom.net] 再度 $list=Get-Content test.txt $text="てすと" foreach($line in $list){ if([string]::IsNullOrEmpty($line)){$line=$text} $str=$line.Substring($line.length-3) if($str -eq $text){ $newline=$str} else{ $newline=$line } $newline } if($str -ne $text){$text}
667 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 01:34:17.86 ID:VsRAmkXY.net] ぱわーしぇる風にパイプかつメモリ最小で作ってほしーなんつって
668 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 01:37:20.38 ID:VsRAmkXY.net] つーかバッチファイルスレで似たような質問してたアホだなこいつ
669 名前:637 [2018/04/01(日) 02:13:27.25 ID:XTr+hbom.net] パイプよりこのほうがずっと高速なもんで
670 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 02:32:32.46 ID:QUrQa6Zt.net] >>639 いいんだけどこれだと空白行全部"てすと"になっちゃてね?
671 名前:639 [2018/04/01(日) 02:44:04.47 ID:XTr+hbom.net] そうしてる。 空白行は空白のままでよかったんだ じゃIFのところだけ書き換え $list=Get-Content test.txt $text="てすと" foreach($line in $list){ if(-NOT [string]::IsNullOrEmpty($line)){ $str=$line.Substring($line.length-3)} if($str -eq $text){ $newline=$str} else{ $newline=$line } $newline } if($str -ne $text){$text}
672 名前:デフォルトの名無しさん [2018/04/01(日) 02:46:44.02 ID:XTr+hbom.net] 考えたらこれだと文字数が3文字未満だとエラーになるな ねむいが・・書き換えてみるかな
673 名前:639 [2018/04/01(日) 02:54:07.64 ID:XTr+hbom.net] 今度はどうだろう $list=Get-Content test.txt $text="てすと" foreach($line in $list){ $newline=$line if($line.length -gt 2){ $str=$line.Substring($line.length-3) if($str -eq $text){ $newline=$str} } $newline } if($str -ne $text){$text}
674 名前:デフォルトの名無しさん [2018/04/01(日) 03:12:47.24 ID:QUrQa6Zt.net] >>646 最終行だけてすとじゃなくてその上にてすとの文字列が有るとそのあと全部てすとになっちゃうね
675 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 03:38:49.54 ID:IR/E13YL.net] こんなもんかね psv2.0に配列のcountあったっけか $file = "test.txt" $text = "てすと" ,@(Get-Content $file)|%{ foreach($i in 0..($_.count-1)){ if($i -eq ($_.count-1)){ if($_[$i] -like "*$text"){ $text }else{ $_[$i];$text } }else{ $_[$i] } } }|Out-File $file
676 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 07:43:52.97 ID:dufOVYHg.net] >>641 あっちは、「最終行」じゃなくて「空行を除く最終行」だったからちょっと面倒だ
677 名前:639 [2018/04/01(日) 07:45:20.17 ID:UUJ9t7Bj.net] >>647 なんと、寝ぼけてやってちゃだめだな。 あとで見直すわ
678 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 08:53:40.41 ID:P1fWuhY2.net] PowerShellコード可読性低すぎワロタwww時代はC#ですわ Add-Type -TypeDefinition @" using System.IO; using System.Text.RegularExpressions; public class Hoge { private static readonly Regex r = new Regex(@"[^\n]*てすと$", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.CultureInvariant); public static void ReplaceLastTest(FileInfo file) { string s = File.ReadAllText(file.FullName); s = r.Replace(s.TrimEnd(), string.Empty) + "てすと"; File.WriteAllText(file.FullName, s); } } "@ [Hoge]::ReplaceLastTest((Get-ChildItem ./test.txt))
679 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 10:49:38.76 ID:IR/E13YL.net] >>651 PSなら書く必要もないもの多過ぎ ついでに普通の環境じゃ編集の補助まったくないだろ
680 名前:デフォルトの名無しさん [2018/04/01(日) 11:08:43.29 ID:P1fWuhY2.net] >>648 や>>646 のほうがよっぽど無駄なコード書いてるじゃんwww ループインデックスとか久々に見たわwwwwベタループも条件分岐もくっそ読みにくいしwww 編集の補助ってインテリセンスの事ならこの程度のコードに必要ないだろw つかpowershellerならVSCodeとっくに入っとるやろwww C#もサポートされとるやんけwwww
681 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 11:37:50.84 ID:QUrQa6Zt.net] >>648 これだと"てすと"の後に無駄な空行があるとその無駄な空行の後に"てすと"
682 名前:チて出力されちゃうね [] [ここ壊れてます]
683 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 11:44:34.33 ID:XEaAmQBZ.net] エディタすら選べない様な残念な環境で頑張るのがPSですから ってのは置いといてadd-typeで強引に解決するのは割と好き
684 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 11:56:29.10 ID:IR/E13YL.net] >>654 最初の条件では空行を無視するとか書いてないけど
685 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 12:07:38.92 ID:IR/E13YL.net] >>653 C#の別ファイル書いてadd-typeの中にコピペすんの? それメンテナンス性最悪だよな
686 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 12:23:46.08 ID:P1fWuhY2.net] つうかこれでええやんwwww 誰だよC#とか言ったアホwwwww function Update-LastTest ([IO.FileInfo]$file) { $s = Get-Content $file | Out-String $s = ($s.TrimEnd() -replace '[^\n]*てすと$', '') + 'てすと' $s | Out-File $file } Update-LastTest (Get-ChildItem ./test.txt)
687 名前:639 [2018/04/01(日) 12:23:50.08 ID:y3W5ZkrO.net] 何言われようと、めげずに どうでしゃろ $list=Get-Content test.txt $text="てすと" foreach($line in $list){ $newline=$line if($line.length -gt 2){ $str=$line.Substring($line.length-3) if($str -eq $text){ $newline=$str} else{$newline=$line} } $newline } if($str -ne $text){$text}
688 名前:639 [2018/04/01(日) 12:29:46.66 ID:y3W5ZkrO.net] >>658 てすとしてないけど、すばらしそう
689 名前:639 [2018/04/01(日) 12:38:23.68 ID:y3W5ZkrO.net] >>658 あれ? 要求されてる仕様の理解が私とちがうな どっちだろう?
690 名前:639 [2018/04/01(日) 12:42:58.03 ID:y3W5ZkrO.net] ABCDてすと => てすと XYX123 => XYX123 てすとのてすと => てすと てすとのabc => てすとのabc みたいな要望じゃないかな?
691 名前:デフォルトの名無しさん [2018/04/01(日) 12:54:30.97 ID:GlQ4Mmqm.net] 2回実行したら全部の行がてすとになって区別付かなくなるけどそれでいい?
692 名前:デフォルトの名無しさん [2018/04/01(日) 12:56:34.68 ID:QUrQa6Zt.net] >>662 >>632 の質問投げた本人ですけど最後はてすとでいいです つまり ABCDてすと => てすと XYX123 => XYX123 てすとのてすと => てすと てすとのabc => てすと 空行 => なにもしない
693 名前:デフォルトの名無しさん [2018/04/01(日) 12:59:57.46 ID:QUrQa6Zt.net] >>664 に追記すると最後"だけ"を置換したいんです 途中に"〇〇てすと〇〇" みたいな感じでてすとってワードが含まれていてもそれは無視したいんです
694 名前:639 [2018/04/01(日) 13:00:29.09 ID:y3W5ZkrO.net] 確認ですが てすとのabc => てすと これあってます? これだと単に文字列 "てすと" が含まれていたら "てすと" と 出力するように思うんですが。
695 名前:デフォルトの名無しさん [2018/04/01(日) 13:02:37.55 ID:QUrQa6Zt.net] >>666 はいそれで良いです
696 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 13:03:50.82 ID:XEaAmQBZ.net] ごめん分かんなくなってきた
697 名前:デフォルトの名無しさん [2018/04/01(日) 13:13:00.52 ID:QUrQa6Zt.net] >>632 ごめんこれ質問が悪かったです 最終行が"てすと"ならじゃなくて最後の空行じゃ無い文字列に"てすと"が含まれていなかったら"てすと"を追記したい が正しい
698 名前:デフォルトの名無しさん [2018/04/01(日) 13:15:43.22 ID:GlQ4Mmqm.net] だめだこりゃ
699 名前:639 [2018/04/01(日) 13:29:09.09 ID:y3W5ZkrO.net] これはどうでしょう。 行に"てすと"という文字列が含まれていたら"てすと"だけを出力 含まれていなければ、そのまま出力 最後の行に"てすと"が含まれていなければ、その行はその出力し つぎの行に"てすと"を追加 結果は$newlistに出力 function newfile{ param($text="てすと") process{ if($_.ToString().Contains($text)){$newline=$text} else{$newline=$_} $newline } end{ if( -NOT $newline.Contains($text)){$text} } } $list=Get-Content ファイル指定 $newlist=$list|newfile
700 名前:639 [2018/04/01(日) 13:30:56.72 ID:y3W5ZkrO.net] さいごに空の行もあり得るわけだ。<=これは入れていない とするとそのはんていを1行追加するようだな。