PowerShell -Part 6

■ このスレッドは過去ログ倉庫に格納されています
2022/02/13(日) 18:36:12.07ID:LaQ04ZoE
前スレ
PowerShell -Part 5
https://mevius.5ch.net/test/read.cgi/tech/1615994992/

次スレは>>980が立ててね!!
2022/02/13(日) 19:10:00.19ID:DaRcZGJS
>>1
2022/02/15(火) 11:59:52.53ID:5Cl7umfN
>>1posh
2022/02/15(火) 16:10:21.28ID:8dPt5mlU
>>1
BathyScaphe利用開始記念書き込み
2022/02/17(木) 00:21:49.24ID:CBYlGRMr
今までコマンドプロンプトを使っていましたが、windows power shellに乗り換えました。

コマンドプロンプトでは、エクスプローラーからドラッグ&ドロップでファイルパスが入力できましたが、
windows power shellではできませんでした。
ファイルパスを楽に入力する方法はないんでしょうか
2022/02/17(木) 09:30:47.39ID:zynXt0BH
普通にできるけど
2022/02/17(木) 15:17:37.72ID:1Rki5Xrp
ドラッグ&ドロップを扱うのはコンソールの仕事なんじゃ?

conhostで試してみたけどcmd/pwsh/windows powershellどれでもいけた
あんまり設定弄ってないはずだけど、左上クリックして出てくるメニューのプロパティからコピペ関連の項目があるので触ってみては

wtで試すと何れのシェルでもファイルのD&Dは受け付けなかった、異常に高機能なのに意外
wtのことならwtスレで聞くといいかと
2022/02/17(木) 15:25:50.87ID:1Rki5Xrp
追伸
wtはexplorer上でファイルをコピーしてctrl+[shift+]vでペーストするとファイル名が入力される

D&Dにこだわる理由がないなら慣れた方が早そう、労力は大して変わらないだろう
95
垢版 |
2022/02/17(木) 19:52:12.95ID:CBYlGRMr
>>6-8
power shellはwindowsボタンを右クリックして起動するやつを使いました。
今試したら、D&Dできないのは「管理者として実行」する方で、通常モードならD&Dできました。
管理者モードかどうかで挙動が変わるんですね・・・。
2022/02/17(木) 22:56:43.04ID:urCZGbW+
UIPIって仕組みで権限またぎのドラッグアンドドロップは禁止されてるみたいね
2022/02/19(土) 09:43:41.33ID:Z9XVFihU
wtスレってどこだよ
勝手が違うから戻してほしいしこんなの作る前に非コンソールのpowershell出せよ
2022/02/19(土) 10:18:51.14ID:Klz8S7Ad
まるでスマホの使い方がわからず店頭でキレて周りに介助してもらおうとするおじいちゃんと同じ言動で草
wtにファイル名をドロップできないのは誤解で、cmdと同じ管理者モード間のOSによるセキュリティ機構のUIPIが原因だった
wtはcmdよりよっぽど癖がない良アプリ
Powershellのほうがよほど癖強い
あとwtは普通に元に戻せる
2022/02/19(土) 14:02:07.12ID:x/upE6G9
>>10
あれなんでだろうね
打ち直せば入力できちゃうんだしよくわからん
2022/02/19(土) 15:57:35.72ID:22rkCkNI
>>13
ドラッグアンドドロップという操作が危険だから狙い撃ちで制限されているというわけではなくて、プロセス間のメッセージ通信に対して制約が掛けられた結果ドラッグアンドドロップも使えなくなった
2022/02/19(土) 16:04:56.07ID:x/upE6G9
>>14
ああなるほど、それなら納得
168
垢版 |
2022/02/22(火) 02:53:21.18ID:LHZaRsEg
>>14
ああ、conhostをadmin専用にしてて、そこから各シェル立ち上げたと思うわ
俺環でテキトーな検証してごめん
2022/02/22(火) 08:44:56.08ID:mFRfNBZm
Allow dragging files or folders into Terminal's Command Prompt window to display their path #12377
https://github.com/microsoft/terminal/issues/12377
2022/02/22(火) 20:22:44.35ID:wkvlg9SU
前スレの質問者に本当に必要だったものは、たぶんこういうのだと思うんだ…
class node {
[node]$val;
[node[]]$children;
}
2022/02/22(火) 20:24:23.06ID:wkvlg9SU
まちがえた→[object]$val

教えたがりおじさん見苦しい
2022/02/22(火) 21:34:19.39ID:5aCEOBVD
昔csvdeのエクスポートデータをVBSで木構造に変換したりしたけどその時はジャグ配列でなんとかなった
powershellだと配列に色々罠があるから大変そう
コマンドレット化されてるデータ構造を扱う事は得意でもテキストを1から解析して階層データとして扱うのには向かない気がする
2022/02/22(火) 22:00:01.99ID:LHZaRsEg
木のテキスト表現がカッコや""等ならbalancing groupでパースするのが便利だよ

perl/Pythonよりdotnetのパターン言語の方が強い(丸パクリだから当然だけど)
2022/02/22(火) 22:10:34.21ID:LHZaRsEg
組み込み型はスプラッターしちゃうとか罠多いから、内部でキッチリ階層持ちたいなら>>18みたいなロートルな手段が堅牢だったり

仕様覚えるという道もあるけど俺は諦めた
2022/02/22(火) 22:27:40.62ID:U3xoo538
逆説的だけど、.NETに詳しくない俺みたいな人ほどテキスト処理は抑えておくべき

なんか良く分からん物が返ってきても、オブジェクトの印字表現をOut-Fileで捕まえてテキスト処理にフォールバックできる()
2022/02/22(火) 22:59:38.55ID:LHZaRsEg
-match一発でパースが済まない木の表現は、段落を使って木を表現するyamlみたいなやつ
balancing group+複数行マッチで頑張れるかもしれないけど、地道にインデント数えてるわ
2022/02/22(火) 23:31:15.02ID:+zCOrMmD
一見不器用でもインデントレベルは素直に数えるのが正解
例えばpythonインタプリタもカウンタを使って構文をパースしてる

yaml系のシリアル化フォーマットは、インデントを数えるだけでパーサが書ける移植性が売り
2022/02/23(水) 20:35:53.13ID:KVH3xsak
Chromeでもパスワードにメモを付けて保存できるようになるみたいね
27915
垢版 |
2022/02/25(金) 01:33:26.38ID:wLKzA9jy
変数を文字列の中に入れ込んでしまって、消せないフォルダが出来てしまいました

C:\works\+ $a

削除もリネームもフォルダ移動すら出来ません
どうすれば削除出来ますでしょうか?
お知恵を貸してください
2022/02/25(金) 02:07:17.42ID:3hSRN4MI
ファイル名に$が入って、$aが展開されちゃう的な?ならエスケープすればいいだけでは
`$a
意図を汲めてるかちょっと自信ないけど
29915
垢版 |
2022/02/25(金) 07:49:52.49ID:wLKzA9jy
>>28

1. 変数を使ってフォルダを作ろうとした

2. 変数に値を代入した $a = 0225

3. C:\works\0225 を作りたかったので
“C:\works\ + $a” としたかったが
’C:\works\ + $a‘ としてしまった

4. + $a という名前のフォルダが
C:\works\ 直下に作られた

5. エクスプローラからもPowershellからも
+ $a と名前のついたフォルダは削除、リネーム、
移動が出来ない
C:\works\ + $a\test.txt のように+ $a フォルダ内に
ファイルを作る事は可能

Win10 Windows powershell 5.1 VSCODEで作成
細かい所はあまり覚えてませんがこんな感じです
2022/02/25(金) 08:55:58.66ID:Ex9z+jLY
うちの環境では削除できた
なんかのプロセスにロックされてるんじゃないの?
2022/02/25(金) 09:22:05.48ID:Ttq2k6xT
エラーメッセージを貼らない奴の相手してもしょうがない
32915
垢版 |
2022/02/25(金) 11:29:32.26ID:omaqMYjV
>>31
これは失礼しました
エラーは下記です。普通の名前のフォルダは削除出来ます

Remove-Item : 引数 '$null' を受け入れる位置指定パラメーターが見つかりません。
発生場所 行:1 文字:1
+ Remove-Item + $a
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Remove-Item]、ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand
33915
垢版 |
2022/02/25(金) 11:32:06.01ID:omaqMYjV
ちなみにフォルダを右クリックして出てくるプロパティ→セキュリティのタブには
「要求されたセキュリティ権限は利用できないか、または表示されません。」
とのエラーも出てます
2022/02/25(金) 11:40:38.52ID:Ttq2k6xT
>>32
> ’C:\works\ + $a‘ としてしまった
んなら

Remove-Item ’C:\works\ + $a‘
ってやれよ…
35915
垢版 |
2022/02/25(金) 12:06:55.57ID:omaqMYjV
>>34
すみません。。
やってみました

Remove-Item : パス 'C:\works\ + $a ' が存在しないため検出できません。
発生場所 行:1 文字:1
+ Remove-Item 'C:\works\ + $a '
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\works\ + $a :String) [Remove-Item], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand
2022/02/25(金) 12:16:43.02ID:SH4WT7RG
コマンドプロンプトを管理者権限で起動
rd /s /q エクスプローラーから対象フォルダをD&D

これで無理なら排他制御キャンセルするソフト使うかPCを一旦再起動
2022/02/25(金) 12:24:59.94ID:Ttq2k6xT
>>35
> Remove-Item : パス 'C:\works\ + $a '
$a の後ろの空白
38915
垢版 |
2022/02/25(金) 12:30:35.39ID:omaqMYjV
>>36
ありがとう御座います

「指定されたファイルが見つかりません」
と返されました。再起動も状況変わらず

Dirコマンドでは+ $a は表示されておりエクスプローラでも見えてるのですが何故か認識されないです
2022/02/25(金) 12:36:38.88ID:yKl3/QUV
コマンドで消したいだけならワイルドカードやタブ補完で選択すればいいじゃない

再起動後エクスプローラーから消せないか試したの?

何がしたいのか分からん
40915
垢版 |
2022/02/25(金) 12:42:21.42ID:omaqMYjV
>>37
空白で思い出しました
試行錯誤してて
'"C:\works\' + $a + '\"'
のような事もやってました

なので(なのかどうかも分かりませんが)フォルダの名前には + $a と後ろにも空白が入っています
41915
垢版 |
2022/02/25(金) 12:44:41.55ID:omaqMYjV
>>39
エクスプローラからの削除だと削除後も+ $a フォルダが残り続けます

やりたい事: + $a フォルダを削除したい
42915
垢版 |
2022/02/25(金) 12:48:15.22ID:omaqMYjV
追記正確なフルパス名
[]は半角スペースです

C:\works\[]+[]$a[]
2022/02/25(金) 12:55:42.52ID:SH4WT7RG
その親フォルダにカレントディレクトリを移動して他に$付くフォルダが無い、或いは削除してしまって良いなら
for /d %a in (*$*) do rd /s /q "%~a"
2022/02/25(金) 13:03:31.62ID:SH4WT7RG
もし>>43で駄目だったら最後のとこ
"%~sa"
を試してみて
2022/02/25(金) 13:04:14.85ID:AEqwOQnl
C:\worksごと消せばいい
46915
垢版 |
2022/02/25(金) 13:06:19.04ID:omaqMYjV
>>43
やはり指定されたファイルが見つかりませんと返されました

一旦整理します

目的︰ + $a フォルダを削除したい
環境:Win10, Win PS ver 5.1, Vscode 1.64.2

記述:'"C:\works\"[]+[]$y[]+[]"\"' (かなり記憶が曖昧)
フルパス C:\works\[]+[]$y[]
※[]は半角スペース

1. エクスプローラ
1.1 右クリック削除→削除後もフォルダが残り続ける
1.2 リネーム→「この項目は見つかりません。次の場所にはありません。」
1.3 移動→同上

2. PS
2.1 Remove-Item(\works直下)→「引数 '$null' を受け入れる位置指定パラメーターが見つかりません。」
2.2 Remove-Item(フルパス)→「 パス 'C:\works\ + $a ' が存在しないため検出できません。」

3. CMD
3.1 rd /s /q→「指定されたファイルが見つかりません」
47915
垢版 |
2022/02/25(金) 13:07:15.53ID:omaqMYjV
上記 $y → $a です
すみません
48915
垢版 |
2022/02/25(金) 13:10:23.66ID:omaqMYjV
>>44
saでも変わらずでした

>>45
>>46の1.1と同じでした
2022/02/25(金) 13:11:33.74ID:AEqwOQnl
フォルダが消したいだけならPowershell関係ないからこちらでどうぞ

Windows 10 質問スレッド Part82
https://mevius.5ch.net/test/read.cgi/win/1644831539/
2022/02/25(金) 13:17:48.06ID:MEIpOner
\\?\C:\fogo
2022/02/25(金) 15:04:10.02ID:gazry23L
>>47
> 上記 $y → $a です
> すみません
だからさあ、入力した内容とエラーメッセージをそのまま貼ってくれよ…
2022/02/25(金) 20:57:30.79ID:FVUZxr5Y
dir "*a*" などとして対象のフォルダだけ表示されることを確認して
dir "*a*" |
2022/02/25(金) 20:58:43.73ID:FVUZxr5Y
dir "*a*" | % {remove-item -LiteralPath $_.Name}
でどうだろうか
2022/02/25(金) 21:06:53.72ID:zbdaU1gm
dir /x
で8.3形式のファイル名があるなら、それで消してみる
だめなら、>>50の形式でフルパスを指定する
55915
垢版 |
2022/02/26(土) 12:47:40.66ID:AL/cEm3C
ありがとうございます。
レス遅くなりました。以下のように返ってきました。
>>53で出てきたフォルダ名+[]$aと末尾に半角スペースが見えません。
見えない文字が埋め込まれている可能性はありますでしょうか?

>>52
dir : 項目 C:\works\ + $a が見つかりませんでした。
発生場所 行:1 文字:1
+ dir "*a*"
+ ~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\works\ + $a :String) [Get-ChildItem], IOException
+ FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

>>53
dir : 項目 C:\works\ + $a が見つかりませんでした。
発生場所 行:1 文字:1
+ dir "*a*" | %{remove-item -LiteralPath $_.name}
+ ~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\works\ + $a :String) [Get-ChildItem], IOException
+ FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
56915
垢版 |
2022/02/26(土) 12:47:51.62ID:AL/cEm3C
>>54
ドライブ C のボリューム ラベルは Windows です
ボリューム シリアル番号は AE2C-1EB8 です

C:\works\ のディレクトリ

2022/02/23 16:50 <DIR> + $a
2022/02/25 10:55 <DIR> .
2022/02/25 10:55 <DIR> ..
0 個のファイル 0 バイト
3 個のディレクトリ 1,144,323,043,328 バイトの空き領域

>>50
使い方が分からず試せてません
2022/02/26(土) 13:19:35.91ID:zbGeAZZp
Win10の質問スレ行けって言ったのに何故行かないのかな?
powershellに拘る理由がわからないよ

仕方ないのでこっちで回答するわ
Poweshell関係ないけど

https://itojisan.xyz/パソコンのトラブル/windows10でフォルダ・ファイルを削除できない/

これ全部試せ
2022/02/26(土) 13:34:00.21ID:DA2+bsLA
これ本来含まれないはずの+が含まれてるから消さないんでしょ

ディスクエディタかなんかで強制的に消せる名前にリネームするしかないのでは?
(FAT時代にしかやったことないからNTFSでできるかは知らん)

曖昧な記憶のスクリプトを正確に思い出せればなんとかなるやもしれんが
普通の方法では+がファイル名かフォルダ名の一部と解釈されないから消すのは無理だと思う
なかなかコーナーケースのバグ見つけたなw

多分PSでどうこうできる領域じゃない
再インストールが一番早いかもw
2022/02/26(土) 13:36:55.01ID:+OtunY2h
当てずっぽうで試す前に、まずabout_Quoting_Rulesを読んでくれ
何かおかしい文字が入ってるのかは、[byte[]]にキャストすれば分かるから
それ見て正しくクオートして入力してくれ
2022/02/26(土) 14:08:05.70ID:+OtunY2h
>>58
+を特別扱いするのはNTFSじゃなくて、特定のコマンドの仕様では?(copy fi+le等)
色んなコマンドが内部で引いてる可能性があるから避けたほうが無難な文字とは思うけど
$もNTFS的には合法だけど、予約名のプレフィックスにする慣習なので、なので避けたほうがいいのは確か
undocumentedなのもいっぱいある
2022/02/26(土) 14:54:37.65ID:+OtunY2h
win10/pwsh7.2.0/NTFSで試してみた

> ni -d sandbox |sl
> echo valid? >'+ $a'
> gci |select name
Name
----
+ $a
> ri '+ $a' &&echo $?
True
> gci |select name
# no output

うーん?
2022/02/26(土) 15:18:46.03ID:1IWc50so
cmdを起動して
rd "\\.\C:\works\ + $a "
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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