X



Windows PowerShell Part5 [無断転載禁止]©2ch.net
0001名無し~3.EXE
垢版 |
2016/09/18(日) 14:06:24.15ID:aFEI7ykR
Windows PowerShell
http://technet.microsoft.com/ja-JP/scriptcenter/dd742419.aspx
オンラインヘルプ
https://technet.microsoft.com/ja-jp/library/bb978526.aspx

■パッケージのダウンロード
PowerShell 3.0 (Windows 7以降)
http://www.microsoft.com/en-us/download/details.aspx?id=34595

PowerShell 2.0 (Vista以前は3.0非対応)
http://support.microsoft.com/?kbid=926140

■参考
http://www.atmarkit.co.jp/fdotnet/special/powershell01/powershell01_01.html
http://oka326.blogspot.com/search/label/PowerShell
http://d.hatena.ne.jp/newpops/
http://blogs.msdn.com/PowerShell

■過去スレ
Windows PowerShell Part4
http://echo.2ch.net/test/read.cgi/win/1359719778/
0162名無し~3.EXE
垢版 |
2017/06/11(日) 03:06:28.35ID:w0GBtplK
PowerShellからファイル名を置換するコマンド

Get-ChildItem "フォルダパス" | Rename-Item -NewName { $_.Name -replace ' ','' }

これ面倒なことしなくていいので便利なんだよね
0163名無し~3.EXE
垢版 |
2017/06/11(日) 03:21:59.17ID:1NpJMaSU
replaceの第二引数にスクリプトブロック渡せればもっといいんだけどな
0165名無し~3.EXE
垢版 |
2017/06/13(火) 19:14:20.67ID:L1x87Djd
書籍見てるとパイプを多用するようなんだが
そうせんと文句言われたりするもんか? (宗教争いが面倒、くらいの意味)
0166名無し~3.EXE
垢版 |
2017/06/13(火) 20:00:35.29ID:L1x87Djd
function print_test($a) {
Write-Host $a
}

print_test "a", "b", "c", "d"

------------------
PS C:\Users\test_user\Desktop>> .\win10_policy.ps1
a b c d

この挙動の謎っぷりマジ謎……
0167名無し~3.EXE
垢版 |
2017/06/13(火) 20:03:28.95ID:L1x87Djd
ああ、そういや , いらんのか、参ったな
0168名無し~3.EXE
垢版 |
2017/06/13(火) 20:05:42.16ID:L1x87Djd
functionの引数では , いるけど呼び出し時は , いらんとかよく間違える
その辺なんとかならんかなぁ
0169名無し~3.EXE
垢版 |
2017/06/13(火) 20:36:58.17ID:BB/uw9Y2
PSのカンマは配列を作るって覚えりゃいい
この二つは同じ

print_test "a", "b", "c", "d"
print_test @("a", "b", "c", "d")
0170名無し~3.EXE
垢版 |
2017/06/13(火) 20:58:22.61ID:mpR7yuzE
pshell使っててWINDOWSのエラーハンドル?が返って来た場合のエラーコード取得って
どうやってやるのが定番でしょうか?

例えばファイルを書き込もうとしてDISC-FULLのエラーになった場合ってエラーコードとしては
0x80xxxx03みたいなコードが返ってきますけど必要なのは下位1ワードだけなんです
0171名無し~3.EXE
垢版 |
2017/06/13(火) 21:11:03.84ID:5bjD86xL
ErrorLevel equivalent
ttp://blogs.msdn.microsoft.com/powershell/2006/09/15/errorlevel-equivalent/
0172名無し~3.EXE
垢版 |
2017/06/13(火) 23:27:40.35ID:L1x87Djd
>>169
たまにしか触らんせいだろうが、細かい部分でどうでもいいエラーが出るので
やっかいだなーという程度

String.equals と -eq で挙動違うのと
foreach-objectでループ二段抜けと
関数呼び出し時の , 有無は俺にはよくある orz

細部の表記に統一性もたしてくれたらPowershellイケてるよね、って言いきれるんだが
なかなか難しいところか
0173172
垢版 |
2017/06/13(火) 23:31:42.01ID:L1x87Djd
function set_registry_entry($key, $entry, $type, $value) {
set_full_registry_key $key
New-ItemProperty -Path $key -Name $entry -PropertyType $type -Value $value -Force
}

function set_full_registry_key($key) {
if (-Not (test-path $key)) {
$parent = Split-Path $key -Parent
Write-Host $parent

if (-Not (test-path $parent)) {
set_full_registry_key $parent
}

New-Item -Path $key
}
}
set_registry_entry "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" "AUOptions" "DWord" 3
set_registry_entry "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" "NoAutoRebootWithLoggedOnUsers" "DWord" 1

Powershellらしからぬ気もするが、パイプを意図的に使っていかないとPowershellぽくなくてダメなんだろうか?
0174名無し~3.EXE
垢版 |
2017/06/14(水) 00:50:51.51ID:uBpyQ5/y
>>173
あくまで自分の趣味だけど、パイプ多用で書き直してみた
この方が関数名や変数名考える必要もないし、名前のミスも少なくてよいと思う
でも関数でやるのが体に染みついてるならその方が楽だろうし、好き好きでいいかと

%{
@{
Path = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU"
Name = "AUOptions"
PropertyType = "DWord"
Value = 3
}
#二つ目は省略
}|%{
$key = $_.Path|Split-Path -Parent
%{
while(-Not (test-path $key)){
$key
$key = $key|Split-Path -Parent
}
}|sort -Descending|%{
Write-Host $_
New-Item -Path $_
}
New-ItemProperty @_ -Force
}
0175名無し~3.EXE
垢版 |
2017/06/14(水) 01:01:13.93ID:uBpyQ5/y
二カ所間違えてた
やっぱテストしないとダメだな

%{
@{
Path = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU"
Name = "AUOptions"
PropertyType = "DWord"
value = 3
}
#二つ目は省略
}|%{
$key = $_.Path
%{
while(-Not (test-path $key)){
$key
$key = $key|Split-Path -Parent
}
}|sort|%{
Write-Host $_
New-Item -Path $_
}
New-ItemProperty @_ -Force
}
0176名無し~3.EXE
垢版 |
2017/06/14(水) 02:10:08.26ID:EBRIef0K
>>174
鬼かwwww

まあ文句言われないようなら関数でもいっか……d
0178名無し~3.EXE
垢版 |
2017/06/14(水) 02:36:31.08ID:EBRIef0K
うげ、また確認用Write-Hostがのこってるとか

うんもういいうや……
0179名無し~3.EXE
垢版 |
2017/06/22(木) 00:57:04.22ID:fpkRrMCt
Win7デフォルト + PowerShell + UI Automationだとコケる可能性あるな
ボタンだかのメソッドを引っ張ってくる「なんちゃらPattern」が何も返さないっぽい

ぽいってのは全パターン網羅やってない、くらいの意味だが
列挙系のメソッドぶっこんだら空でしたって悲しい話(Write-Hostで戻り値みたら何もでなかった、くらいの意味で
0180名無し~3.EXE
垢版 |
2017/06/25(日) 13:35:27.43ID:LNtNrXAc
Excel の表をソートする方法はありますか。
範囲A1:K8 の表の、D2 の列を昇順にソートしたいのです。
0185名無し~3.EXE
垢版 |
2017/07/02(日) 16:53:53.67ID:UIKX1dqP
poweshellって結構なんでもできそうな感じがするんだけど、もしかしてDirectXのDDSファイルの情報とかも取れたりするのか?
0186名無し~3.EXE
垢版 |
2017/07/02(日) 21:06:40.70ID:Ex/F46Ei
DDSファイルの情報を取得して返すプログラムを書く

そのプログラムをPowerShellから呼ぶ

で、できるんじゃないの
0187名無し~3.EXE
垢版 |
2017/07/02(日) 21:56:57.99ID:T5t1iplf
>>186
馬鹿が一々口出してこ無くていいよ
そんなに構って欲しいの?構ってチャン
0189名無し~3.EXE
垢版 |
2017/07/04(火) 06:37:37.78ID:1z/ArB25
>>185
DDSファイルの情報が何者か知らんけどファイル内に情報あるなら取得できるでしょ
0190名無し~3.EXE
垢版 |
2017/07/13(木) 13:04:49.42ID:bXEmJwai
偉い人アドバイスをお願いします。↓のブログを見つけて携帯にグローバルIPアドレスの変更を通知しようと考えまして、
旧アドレスを記載したテキストを参照するところまでは記述の意味を何とか理解できたのですが、
「レスポンスの読み込み&確認」以降がどうしても良くわかりません。
http://rtaki.blogspot.jp/2010/10/ip.html

サイト(http://www.axisnetworks.biz/tools/gip/)のソースを見てみると、グローバルIPアドレスの直前に「<p class="style4" name="ip">」がありますので、
「$line」が空でなければ、そこにこれが含まれているかチェックして、次に何かとの一致があるかを確認しているようですが、
この「(?<address>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)」が何を意味しているのか分からないです。

また、「$new address」は「$matches.address」だと定義され、それが変更時には上書き動作に引き継がれているようですが、
その「$new addredd」がどこから来るのかが分かりません。

なお、Write-Outputについては、2つ目の「前回確認済みのグローバルIPアドレス:」までは表示できています。
0191名無し~3.EXE
垢版 |
2017/07/13(木) 14:19:38.17ID:sHpRNaRR
正規表現でIPアドレスっぽいパターンを持った文字列を検索して、見つかったらその部分にaddressという名前を付けてる
$new addressではなく$new_addressな
どこから来るとかではなく、新しい変数をここで初めて宣言して代入してるだけ
$matchesの方がどこから来たかというと、-match演算子の結果が格納される暗黙変数として決められてる
どっちのifでどう失敗してるかとか、Write-outputをいろんな行に入れて、いろいろな値や式を渡して模索してみるといいと思うよ
0192名無し~3.EXE
垢版 |
2017/07/13(木) 14:37:43.43ID:9gYiCLE3
>>190
なかなか新鮮な質問だねw
(?<address>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)
は正規表現で、数字の連続、点、数字の連続、点、数字の連続、点、数字の連続 にマッチする。要するにIPアドレスっぽい部分
?<address>はマッチした文字を入れる変数名の指定。$Matches.addresという書き方で参照できて分かりやすいねという話

$new_address = $matches.address は単純な代入式だw $new_addressという変数に$matches.addressの値を入れてるだけ
昔言語の先生の、「プログラムの=はイコールじゃない。結果的に同じになるけど」ってセリフ思い出したw
0193名無し~3.EXE
垢版 |
2017/07/13(木) 15:11:58.44ID:bXEmJwai
>>191
ありがとうございます! 教えてもらった「match演算子」というキーワードで検索したら↓のサイトがすぐにヒットして、ようやく意味がつかめそうです!
http://www.pine4.net/Memo/Article/Archives/168

「$matches.address」のドットが「$resp.ContentEncoding」のドットのようにメソッド等の前に付けるものなのかな?と思っていたため、その前の「$mathes」は単なる任意の変数かと思い込んでました^^;
https://technet.microsoft.com/ja-jp/scriptcenter/powershell_owner01.aspx
今まで全くプログラムは経験がなかったので↑とか複数の解説に目を通して基本的なルールを確認していたのですが、ド素人にはかなりハードルが高くて数日悩んでました・・・。
0194名無し~3.EXE
垢版 |
2017/07/13(木) 15:24:50.03ID:bXEmJwai
>>192
ありがとうございます! [0-9]+については、↓の記載をみてIPアドレスの3ケタだと思っていたのですが、「\.」が不明でした・・・。
http://www.lightship.co.jp/FileVisor6/help/operation/regexp.htm
エスケープが「'」だって解説があったので、もしかしたら\も?とは想像していたのですが、ドットを文字として使いたい場合は\を前に付けるという理解で合っていますか?
0196名無し~3.EXE
垢版 |
2017/07/14(金) 21:39:20.68ID:wklSEW3P
>>194
` はPowerShellのエスケープ
RegularExpressionはPowerShell専用じゃないので\をエスケープに使ってる
ちょっと戸惑うけどそう言うものだと思うしかない
0199名無し~3.EXE
垢版 |
2017/07/20(木) 03:26:11.89ID:ri2MNCBu
かつてWSHが捨てられたように、今度はPSが捨てられる序章ってこと?
0201名無し~3.EXE
垢版 |
2017/07/21(金) 13:57:33.80ID:cc7rg772
100枚ほどある連番画像を保存したくプログラミングの知識もない自分が
独学で下記のようなスクリプトを書きました
目的は果たせたのですがこういう風に書いた方がいいとかの意見が頂けると助かります

画像URL
"http://modelblog.org/wp-content/uploads/2017/05/EvaR24_001.jpg";から
"http://modelblog.org/wp-content/uploads/2017/05/EvaR24_100.jpg";まで

スクリプト
$Dir = ".\IMG\EvaR24_"
for ($i=1; $i -le 100; $i++){
$Source = "http://modelblog.org/wp-content/uploads/2017/05/EvaR24_"; + $i.ToString("000") + ".jpg"
$Dest = $Dir + $i.ToString("000") + ".jpg"
Invoke-WebRequest -Uri $Source -OutFile $Dest
}
Pause
0202名無し~3.EXE
垢版 |
2017/07/21(金) 17:52:42.84ID:n0TmnpH/
そのままでもいいと思うけど
PSの推奨する書き方はたぶんこんな感じ

$Dir = ".\IMG\EvaR24_"
foreach($i in 1..100){
$hash = @{
Uri = "http://modelblog.org/wp-content/uploads/2017/05/EvaR24_{0:000}.jpg" -f $i
OutFile = Join-Path $Dir ("{0:000}.jpg" -f $i)
}
Invoke-WebRequest @hash
}
Pause
0203201
垢版 |
2017/07/21(金) 19:45:56.98ID:cc7rg772
>>202
ありがとうございます。
こんなナイスな書き方あるとは想像も付きませんでした。
どうして@hashが
-OutFile: ファイルパス -Uri: 画像URL
みたいな感じで展開されるのかも未だ理解出来てないのですが
調べながら理解を深めたいと思います
0206名無し~3.EXE
垢版 |
2017/07/21(金) 21:09:01.27ID:n0TmnpH/
>>203
@ で展開されるとか、まあそういうもんだと思うしかないね
利点は別の変数用意する必要ないからミスが減る
0207名無し~3.EXE
垢版 |
2017/07/21(金) 21:46:44.09ID:oVoJzTd2
>>201
> $Dir = ".\IMG\EvaR24_"
この 'EvaR24_' と
> $Source = "http://modelblog.org/wp-content/uploads/2017/05/EvaR24_";
このURLの最後の 'EvaR24_' が同じ意味なら
$Dir = '.\IMG'
$Prefix = 'EvaR24_'
for($i in 1..100){
 $Name = "$Prefix{0:000}.jpg" -f $i
 $Source = "http://modelblog.org/wp-content/uploads/2017/05/$Name";
 $Dest = Join-Path $Dir $Name
 Invoke-WebRequest -Uri $Source -OutFile $Dest
}
Pause
ってやるかな
0208名無し~3.EXE
垢版 |
2017/07/21(金) 22:08:28.87ID:cc7rg772
>>204
>>205
スプラッティングと言うんですね リンクありがとうございます
ためになります

>>206
便利な機能だと思うのでそういうもんだと思って受け容れたいと思います

>>207
まさにそういうことでファイル名の一部です
自分でも$Dirなんて名前の変数に含めるのはちょっとおかしいかな?
と思いつつ手抜きしてた部分だったのでお恥ずかしい限りです

みなさんありがとうございます
0211名無し~3.EXE
垢版 |
2017/07/22(土) 15:38:34.69ID:ZPn40T7y
質問させてください。

@:ADからユーザーIDを基にメールアドレスを引っ張ってくる
A:@の処理を数百単位のユーザー分一気に行い、ファイル(txt、csv等)に出力

↑の2点をやる必要があり方法を調べているとどうも@はpowershellでできそうだ、と
詳細を調べて以下の形でメールアドレスを引っ張り、csvに出力すること自体はできました。

get-aduser -filter {Name -like "ユーザー名"} -Property EmailAddress | Select-Object EmailAddress | Export-csv -path パスとファイル名.csv -NoTypeInformation
ですが、出力された結果は

EmailAddress
xxxxx@xxxxx.co.jp
と2行になっていました。

これを2行目(メールアドレスだけ)出力する方法はないでしょうか。

また、Aについて、あらかじめ用意したユーザーIDが記載されたファイルのインポートややコピペで一気にメールアドレスを
出力する方法はないでしょうか。

よろしくお願いします
0212名無し~3.EXE
垢版 |
2017/07/23(日) 00:53:06.06ID:Nd7aVD4N
>>211
csvの形式は最初にヘッダ行が必要だから、それが正常な出力だよ
アドレスだけにしたいならこれでいい
get-aduser 略|%{$_.EmailAddress}|out-file パスとファイル名.txt

あとユーザー名のリストでやるならこうかな
Get-Content ユーザーIDが記載されたファイル|%{get-aduser -filter {Name -like $_} -Property EmailAddress }| 略

やっつけで処理遅そうだけど
0213名無し~3.EXE
垢版 |
2017/07/23(日) 12:53:39.37ID:UUTJNbvb
スクリプトを覚える動機は何時だってエロ画像ダウンローダなんだな。
0214名無し~3.EXE
垢版 |
2017/07/23(日) 15:37:13.38ID:6cZzbtBm
わざわざVSを立ち上げてプロジェを作るほどじゃないけど、だからと言って
いまさらbatchを使う気にもなれない

と言う理由でpshを使ってる
0215211
垢版 |
2017/07/23(日) 23:17:29.17ID:ZUCJRLjI
>>212
ありがとうございます。お礼遅くなってすいません。
教えていただいたやり方で一斉にメールアドレスを取得できる事を確認できました。

Powershellなんて使った事もない人間に無茶振りする上司が悪いので、もっさりでも
「こんなもんですよ」で通しますw
0216名無し~3.EXE
垢版 |
2017/08/23(水) 19:48:20.34ID:K6FzLXiK
$付きの環境変数があるんだけど、変数名の前にenv:付けても取れない。

この場合どうせればよいかのぅ。
0217名無し~3.EXE
垢版 |
2017/08/23(水) 22:02:15.15ID:VB5Lke+t
引用符をシングルクォートに変える
それでもダメならアクサングラーブでエスケープするとか
0218名無し~3.EXE
垢版 |
2017/08/23(水) 22:46:53.73ID:+z4ALWbP
>>217
明日やってみます!ありがとう!

結果も報告いたしますね!
0219名無し~3.EXE
垢版 |
2017/08/23(水) 23:12:11.64ID:+z4ALWbP
>>217
あれ。。こんな感じですか?

環境変数 $aaa

$bbb='$env:aaa'
echo $bbb

変数bbbに、環境変数$aaaが代入される
0220名無し~3.EXE
垢版 |
2017/08/24(木) 03:02:06.70ID:rzZwBEXI
それだと単にaaaという環境変数を求める書き方になってる
ちょっと試してみた
get-item 'env:$aaa'
get-item env:'$aaa'
get-item env:`$aaa
どれでも値を取り出せる
echo等に直接渡すために上記の先頭に$を付けると{}で囲んでみろよという親切な警告が出るね
{}で囲むならシンプルにecho ${env:$aaa}でOKだったわ
0221名無し~3.EXE
垢版 |
2017/08/24(木) 09:33:50.87ID:exQb0Veg
>>220
取れました!取れました!取れました!取れました!

ありがとおおおおおおおおおおおおおおおおおおおおおおおおございます!!
0222222
垢版 |
2017/08/26(土) 21:33:05.73ID:qJjd1Si9
222
0223名無し~3.EXE
垢版 |
2017/08/27(日) 14:49:12.76ID:BZUzZkbu
先輩方お世話になります

PowerShellではIEやExcelについては、内部情報がわかっているのでセル内の数値を読みだしたり、
IEでWeb上のデータをExcelに読み出したりできますが、
知らないソフトを操作することはできるのでしょうか。
パスワード管理ソフトがそこにあった場合、それを自動で操作できるものでしょうか。
0225223
垢版 |
2017/08/29(火) 21:14:26.67ID:7bPgRSF4
>>224
それを見て安心しました。
PowerShellを本格的に使います。
ありがとうございました。
0226名無し~3.EXE
垢版 |
2017/09/10(日) 12:26:26.59ID:YsDxJ9ZZ
引数で渡されたcsvヘッダーなしファイルを、
1レコードづつ分割して、
各レコード中の5番目の項目をファイル名にしたく
色々調べて何となくパワーシェルでできそうかもと感じたのですが、
パワーシェルでは難しいものでしょうか
0227名無し~3.EXE
垢版 |
2017/09/10(日) 12:53:01.82ID:0mVKrcBD
>>226
コンピューターは使う人の知性を映す鏡
0228名無し~3.EXE
垢版 |
2017/09/10(日) 13:34:51.33ID:72pY/uhV
簡単だよ
その用途ならAWKも良い
0229名無し~3.EXE
垢版 |
2017/09/11(月) 12:45:03.65ID:Gp/rMbPi
エラー表示を出したくないのですが、
invoke-restmethod -uri http://127.0.0.1/ -ErrorAction SilentlyContinue
invoke-restmethod -uri http://127.0.0.1/ | out-null
invoke-restmethod -uri http://127.0.0.1/ 2> $null
のいずれもエラーが出てしまいます。何か良い手はないでしょうか。
0230名無し~3.EXE
垢版 |
2017/09/11(月) 22:46:08.52ID:pDTfTVG6
>>226
PowerShell csv
とかでググることもしない君には無理かも
0232名無し~3.EXE
垢版 |
2017/09/18(月) 18:01:59.09ID:z0dfOjEc
使い始めて半年になるけど、コマンドプロンプトよか遥かにマシだけど、MSのスクリプト言語はやっぱうんこだね
0233名無し~3.EXE
垢版 |
2017/09/18(月) 19:06:44.92ID:QH/6RVNP
>>232
あなたの考えるうんこでないスクリプト言語は何?
0234名無し~3.EXE
垢版 |
2017/09/18(月) 19:32:27.48ID:+WRQpGhp
>>232
理由を説明することが出来ず結果だけ述べるやつは頭蓋骨の中にウンコが詰まってるらしいね
0235名無し~3.EXE
垢版 |
2017/10/25(水) 11:06:28.36ID:JtsQ00zm
負荷テストのために下記コードを書いて見ましたがこれって音は全部鳴ってるのかな?
# 下記サイトより効果音をお借りしました。
# http://maoudamashii.jokersounds.com/archives/se_maoudamashii_explosion06.html
# d:\indexフォルダは好きなように変更してください。
$loopcont = 128
$list = New-Object 'System.Collections.Generic.List[System.Media.SoundPlayer]'
for ($i=0; $i -lt $loopcont; $i++){
$a = New-Object Media.SoundPlayer("d:\Index\se_maoudamashii_explosion06.wav")
$list.Add($a)
#$list[$i] = New-Object Media.SoundPlayer("d:\Index\se_maoudamashii_explosion06.wav")
Write-Output "サウンド $i を追加しました。"
}
for ($i=0; $i -lt $loopcont; $i++){
$list[$i].PlayLooping()
Write-Output "サウンド $i を再生しました。"
Start-Sleep -m 10
}
Start-Sleep -s 15
for ($i=0; $i -lt $loopcont; $i++){
$list[$i].Stop()
Write-Output "サウンド $i を停止しました。"
}
Start-Sleep -s 5
0236名無し~3.EXE
垢版 |
2017/10/25(水) 11:25:25.12ID:JtsQ00zm
プログラムスレ行きます
>>235は取り下げします
0237名無し~3.EXE
垢版 |
2017/10/25(水) 20:59:37.67ID:PDzaCZ5k
UI Automation Extensionで#32770のダイアログを取得してくれないのってどう対応すればいいんでしょうか
UIAutomationSpyで見る限り取得先は間違ってないんですが、Sleep入れたりしても改善しません
0238名無し~3.EXE
垢版 |
2017/11/18(土) 18:06:45.29ID:UcLIZr65
>>226
練習のつもりでそれやってみた。私がやったのはこんな感じ。
もっといい方法あるんでしょうけど。
$lines=get-content c:\Test.csv
$head=($lines[4].Split(",")).ForEach({$_})
$data=($lines|ConvertFrom-Csv -Header $head)[0..3+5..($lines.Length-1)]
0239名無し~3.EXE
垢版 |
2017/11/18(土) 23:11:51.44ID:Mf7cpqpp
テキスト変換ならawkも楽しい
gawk -F ',' -- '{print>>$5}' %1
0240226
垢版 |
2017/11/18(土) 23:56:55.00ID:Ygx0l9RN
あ〜〜〜、
私、問題を取り違えてる
5列めをファイル名にすんのね。
5行目をラベルにすると勘違い。
またトライしてみよう。
0241240
垢版 |
2017/11/18(土) 23:58:36.40ID:Ygx0l9RN
ごめん、いまの226じゃなく238ね、
何度も申し訳ない。
0242238
垢版 |
2017/11/19(日) 00:10:05.38ID:nfO6ObjC
こんな感じかな。
ファイル名にして、中身を何にするのかわからないんで
単に5列めを取り出しただけだけになるけど

$lines=Get-Content c:\test csv -Encoding Default
$lines|%{$_.Split(",")[5]}
0243名無し~3.EXE
垢版 |
2017/11/19(日) 00:14:55.58ID:nfO6ObjC
同じことを短く書くとこうかな
(Get-Content C:\Test.csv).Foreach({$_.Split(",")[5]})
0244名無し~3.EXE
垢版 |
2017/11/19(日) 00:26:02.63ID:nfO6ObjC
さらに短くすると、こんな感じかな
(GC C:\test.csv).foreach({$_.Split(",")[5]})

PowerShellって
他のスクリプトに比べると可読性がいいね
0245名無し~3.EXE
垢版 |
2017/11/19(日) 02:22:08.54ID:LCql9sHm
>>244
cat C:\test.csv | %{$_.Split(",")[5]}
とか?

Get-Content はcatと書きたい派
0246名無し~3.EXE
垢版 |
2017/11/19(日) 02:36:06.41ID:LCql9sHm
まあ、ヘッダーがないなら付けた方がいいよね。
単純に「,」で分割しちゃうとエスケープされた,が入っている時に困る

cat C:\test.csv | ConvertFrom-Csv -Header @('a', 'b', 'c', 'd', 'filename') | %{$_.filename}
0247名無し~3.EXE
垢版 |
2017/11/19(日) 02:37:06.89ID:nfO6ObjC
パイプ経由だったら
cat C:\test.csv|Select ({$_.split(",")[5]})

の方が速いかもしれない
0248名無し~3.EXE
垢版 |
2017/11/19(日) 09:34:58.92ID:TgXrsdVc
>>239以外は5列目を取り出すというスクリプトにしかなってない
エクササイズにしたってそれでいいの?
質問者の「ファイル名にしたい」というキーワードは、行ごとに個別ファイルに分割出力したいってことと考えるのが自然
いろいろ調べてパワーシェルでできそうかも?パワーシェルでは難しいですか?って疑問ともよりマッチする
質問者の言葉足らずも、プログラマのできる範囲ややってみたいことも「顧客が本当に必要だったもの」っていうブランコの風刺絵を連想させるゾ
0249名無し~3.EXE
垢版 |
2017/11/19(日) 12:46:31.72ID:1tHYW+l5
ファイル名にしたいっていうのが良く分からんかったからスルーしてたわ。

とりあえず、csvの5列目の値をファイル名にもつ、空ファイルを作るならこんな感じかな?
(動かしてないけど)
cat C:\test.csv | ConvertFrom-Csv -Header @('a', 'b', 'c', 'd', 'filename') | %{eco "" > $_.filename}
0250名無し~3.EXE
垢版 |
2017/11/19(日) 16:02:25.58ID:Nsr/SpEW
$path = 'C:\test.csv'
gc $path | % {sc (ConvertFrom-Csv $_ -h (1..5)).(5) $_}

別に質問スレじゃないから、古い質問をダシに遊んでたっていいんじゃね?
0251名無し~3.EXE
垢版 |
2017/11/19(日) 22:35:40.93ID:sJdRKCTL
出力ファイルの内容を何にするのか意味がとれなかったよ。
その行ということなんだな。こんなやり方にしてみた。
GC C:\test.csv|%{out-file -i $_ -fi $($_.Split(",")[0]+".csv")}
0252251
垢版 |
2017/11/19(日) 22:37:25.19ID:sJdRKCTL
あ、配列のインデックス間違った
0 じゃなく 4 ですね。
0253名無し~3.EXE
垢版 |
2017/12/11(月) 11:48:54.63ID:75DGGivq
powershellのバグ発見しちゃったんですけど。
chdir "test.txt" 2> clip
ってやってもエラー出力がクリップボードにコピーされません。
0254名無し~3.EXE
垢版 |
2017/12/11(月) 12:51:32.49ID:75DGGivq
chdir "test.txt" 2>&1 | clip
ってやったらできました。
バグなんて言ってすいませんでした、powershellさん。
0255名無し~3.EXE
垢版 |
2017/12/13(水) 05:24:58.05ID:Dgxm2rhe
生成されたゴミファイルには気づくだろうか
0256名無し~3.EXE
垢版 |
2017/12/16(土) 23:54:25.16ID:dXayVCuU
gc aaa.txt

↑のコマンドでaaa.txtの中身を表示できますが、この時に

1行目
2行目
3行目
4行目
5行目

と行順に表示するのではなく

3行目
2行目
5行目
1行目
4行目

のようにランダムに表示することはできるのでしょうか?
0257名無し~3.EXE
垢版 |
2017/12/17(日) 09:38:12.67ID:SwwokNJs
$txt = gc aaa.txt
random $txt -c $txt.Length
0258名無し~3.EXE
垢版 |
2017/12/19(火) 12:49:03.00ID:uzBHC9yI
友達がWindowsで稼げている情報など。ニュースというか参考までに。
⇒ http://kuchibeta.sblo.jp/article/181868190.html

興味がある方のために書きました。

OEE18BYXAP
0259256
垢版 |
2017/12/28(木) 06:25:36.92ID:PKks4Rou
>>257
返信遅れてすみません。
うまく出来ました。ありがとうございます!

randomってかなり初期バージョンのPowerShellですら使えるんですね。存在すら知りませんでした(^_^;)
レスを投稿する


ニューススポーツなんでも実況