ここから質問投稿すると、最大4000ポイント当たる!!!! >>

Powershellについて質問いたします。

自分で確かめた限りですが、paramとargsは同時に使用できないのでしょうか?

使用の仕方は

$args.length
param($引数1,$引数2.$引数3)
といった形で、paramの前にargs定義があると下記のエラーがでて
用語 'param' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。

逆にparamがargsの前にあると値が取れていないみたいです。(args.lengthの値が0)

Paramでlengthのようなことができればいいのですが。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

自信なし。

(あんまPowerShell
param($引数1,$引数2.$引数3) ←第二引数と第三引数の間はピリオドでいいの?カンマじゃなくて。試さないけど。
#関数型言語のSchemeには、残りの引数を全部リストに突っ込んだものが代入されるとかある。

で。
paramというコマンドやらがあるのではなく、単に「関数」の構文の一部なだけなんじゃないかと思った。
http://technet.microsoft.com/en-us/library/dd347 …

for ($i = 0;$i < 5;i++)
System.Console.WriteLine("Hello World");
{
}

みたいに埋め込まないのと一緒で。

#paramキーワードは省略可能。
=====================
>逆にparamがargsの前にあると値が取れていないみたいです。(args.lengthの値が0)

それは多分、paramで指定するのが、「名前付きパラメーター(Named Parameters,PowerShell ISEのヘルプの和訳を利用)」であって、

$argsによって取得できるのが、「位置指定パラメーター(Positional Parameters):PowerShellのヘルプによると【名前のない引数】」だからじゃないかなーと予測している。

>Paramでlengthのようなことができればいいのですが。
これができるかどうかは確認してない。
    • good
    • 0

訂正:(あんまPowerShell使ってない)

    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QPowerShellでのエラー出力の読み捨て

PowerShellでスクリプトを書いています。そこで、かならずメッセージが表示される処理があります。無視してかまわない内容なので、bash等の 2> /dev/null に相当するような「読み捨て」を行いたいのですが、PowerShell でのやり方がわかりません。ご存知の方、教えてください。

Aベストアンサー

2>Out-Null

参考URL:http://www.google.co.jp/search?hl=ja&q=powershell+redirect+error+null&lr=lang_ja

QPowerShellからPowerShellを呼び出す方法

PowerShellからPowerShellを呼び出す方法

次のバッチファイルと同等の事をPowerShellで行う方法を教えて下さい。

下記のような非常に簡易的なバッチファイルがあるとします。

■ aaa.bat ■
echo test
■ aaa.bat ■


■ bbb.bat ■
aaa.bat > aaa.log
■ bbb.bat ■


■ コマンドプロンプト ■
cmd> aaa.bat ・・・ 下に「test」と出力される
test
cmd> bbb.bat ・・・ ファイルaaa.logに「test」と出力される
■ コマンドプロンプト ■



同じ事をPowerShellでするとすれば

■ aaa.ps1 ■
echo "test"
■ aaa.ps1 ■


■ PowerShellの画面から ■
PS > ./aaa.ps1 ・・・ 下に「test」と出力される
test
PS > ./bbb.ps1 ・・・ ファイルaaa.logに「test」と出力される
■ PowerShellの画面から ■

この時の「bbb.ps1」はどのようになりますか?

PowerShellからPowerShellを呼び出す方法

次のバッチファイルと同等の事をPowerShellで行う方法を教えて下さい。

下記のような非常に簡易的なバッチファイルがあるとします。

■ aaa.bat ■
echo test
■ aaa.bat ■


■ bbb.bat ■
aaa.bat > aaa.log
■ bbb.bat ■


■ コマンドプロンプト ■
cmd> aaa.bat ・・・ 下に「test」と出力される
test
cmd> bbb.bat ・・・ ファイルaaa.logに「test」と出力される
■ コマンドプロンプト ■



同じ事をPowerShellでするとすれば

■ aaa.ps1 ■
echo "test"
■ aaa.ps1 ■


■ ...続きを読む

Aベストアンサー

回答番号:No.1 お礼へのアドバイスです。

>「キックして結果を待は待たずに次の処理をする」
>などのバリエーションは可能でしょうか?

使いこなせていませんがPowerShell 2.0ではバックグラウンドジョブが実現されました。下記の@ITの記事などが参考になると思います。

http://www.atmarkit.co.jp/fwin2k/winsv2008r2/03powershell/03powershell_03.html

Windows7で Start-Job, Get-Job, Receive-Jobが働くことを確認しました。

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

よろしくお願い致します。

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた

QPowerShellでの外部ファイルからの変数読み

PowerShelにおいて外部ファイルに書いてある変数を設定したと考えています。

たとえばread.iniファイルに下記の記載があるとします。
[yomikomi]
FilePath,C:\temp\test
MODRI,3
Message,"エラーが起きました"

このファイルをps1ファイルで読み込んで変数にしたい感じです。
$FilePath=C:\temp\testといった感じ)
区切り文字とかは何でもいいです。

読み込ませ形式についてはiniかps1形式が理想です。

ただ実行ps1ごとに読み込ませるファイルが異なるため.profileなどの初期読みこみ
系にかけない状況です。(profileがもっと応用的に使用できるならいいですが)

よろしくお願いします。

Aベストアンサー

丁度同じような話が出ました。
http://okwave.jp/qa/q6899282.html

ポイントの部分だけ抜き出したものを載せておきます。
不要行の読み飛ばしや配列利用は、適宜応用してみて下さい。


*** 以下の2ファイルを同ディレクトリに配置し、script.ps1を実行する ***

*** script.ps1 ***
Get-Content .\read.ini | Foreach-Object {
$name, $value = $_.split(',', 2)
Invoke-Expression "`$$name='$value'"
}

echo $FilePath $MODRI $Message

*** read.ini ***
FilePath,C:\temp\test
MODRI,3
Message,"エラーが起きました"

Q文字列として"(ダブルコーテーション)を表示させる方法

こんにちは。文字列として、ダブルコーテーションを表示させるには、どうすればよいのか教えてください。m(__)m


例えば、
<font size="2">あいうえお</font>

というタグの「あいうえお」の部分が、セルA1にあった場合、

="<font size="2">"&A1&"</font>"という表示にしたいのです。

"2"のダブルコーテーションも文字列として表示させるには、どうすればよろしいのでしょうか。

教えてください。よろしくお願い致します。

Aベストアンサー

こんにちは~

表示形式は 「標準」 のままで、
ダブルコーテーションを、ダブルコーテーションで囲んでください。

""2""

="<font size=""2"">"&A1&"</font>"

としてみてください。

QPowerShellのスクリプト実行について

PowerShellのスクリプト実行について

PowerShellの勉強をしていますが、スクリプトを実行できません。。。
なんか、スクリプトの環境変数を設定するようですが、どこにも
設定方法がないです。。。。
もちろん、Set-ExecutionPolicy Unrestrictedは実行してあります。


以下日付と時間を表示するだけのスクリプトです。

---------test.ps1---------
get-date
get-time
----------------------------

スクリプトファイルの置き場所 ⇒ C:\script-test\test.ps1


ちなみに、スクリプトファイルを置いたディレクトリに移動して
実行しても、以下のようなメッセージが出て実行できませんでした。。

用語 'C:\script-test' は、コマンドレット、関数、スクリプト ファイル、または操作
可能なプログラムの名前として認識されません。名前が正しく記述されていることを確
認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してく
ださい。
発生場所 行:1 文字:15
+ C:\script-test <<<< .\test.ps1
+ CategoryInfo : ObjectNotFound: (C:\script-test:String) []、Comma
ndNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException


どなたかご教授下さい。

PowerShellのスクリプト実行について

PowerShellの勉強をしていますが、スクリプトを実行できません。。。
なんか、スクリプトの環境変数を設定するようですが、どこにも
設定方法がないです。。。。
もちろん、Set-ExecutionPolicy Unrestrictedは実行してあります。


以下日付と時間を表示するだけのスクリプトです。

---------test.ps1---------
get-date
get-time
----------------------------

スクリプトファイルの置き場所 ⇒ C:\script-test\test.ps1


ちなみに、スクリプトファイルを置いたディレク...続きを読む

Aベストアンサー

No.1の追記です。
エラーの箇所は パスの 15文字目、つまり C:\script-test の次の(next)文字にあり、
エラー内容は CommandNotFoundException となっていますので、
「ファイルの拡張子がおかしい」ということです。
添付画像の上段のような指定をしているのであれば、
下段のように指定してみてください。
---
今回の場合は「環境変数」は関係ありません。
質問者さんが、なぜ「環境変数」を問題にしている理由が解りません。

QPowershell ISEの日本語化設定

Win7SP1にWindows Management Framework 5.0をインストールしてPowerShellのバージョンを5.0にしたのですが、ISE のメニューが英語になってしまい困っています。

コマンドヘルプを参照しながら勉強してる所なのでできれば日本語に変えたいのですが設定が見当たりません。やり方を教えて下さい

Aベストアンサー

5.0は英語版しか出ていないはずです。
4.0はダウンロード時に言語を選択できます。

Qバッチファイルで昨日の日付を取得

すみません、どなたか教えて下さい。

バッチファイルの記述で、昨日の日付を取得する方法を教えて下さい。
今日の日付は下記のように取得しています。

rem 日時変数の取得
for /f "tokens=1-3 delims=/" %%a in ('echo %date:~-10%') do (set YYYYMMDD=%%a%%b%%c
)

Aベストアンサー

:: ----- prevdate.bat はじめ -----
@echo off
::今日の日付を取得
set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
echo 今日は、%yy%年%mm%月%dd%日です。

::1日前の日付を計算する
set /a dd=%dd%-1
set dd=00%dd%
set dd=%dd:~-2%
set /a ymod=%yy% %% 4
if %dd%==00 (
if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1)
if %mm%==02 (set mm=01&& set dd=31)
if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29))
if %mm%==04 (set mm=03&& set dd=31)
if %mm%==05 (set mm=04&& set dd=30)
if %mm%==06 (set mm=05&& set dd=31)
if %mm%==07 (set mm=06&& set dd=30)
if %mm%==08 (set mm=07&& set dd=31)
if %mm%==09 (set mm=08&& set dd=31)
if %mm%==10 (set mm=09&& set dd=30)
if %mm%==11 (set mm=10&& set dd=31)
if %mm%==12 (set mm=11&& set dd=30)
)
echo 昨日は、%yy%年%mm%月%dd%日です。

echo.
pause
:: ----- prevdate.bat おわり -----

参考URL:http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html

:: ----- prevdate.bat はじめ -----
@echo off
::今日の日付を取得
set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
echo 今日は、%yy%年%mm%月%dd%日です。

::1日前の日付を計算する
set /a dd=%dd%-1
set dd=00%dd%
set dd=%dd:~-2%
set /a ymod=%yy% %% 4
if %dd%==00 (
if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1)
if %mm%==02 (set mm=01&& set dd=31)
if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29))
if %mm%==04 (set mm=03&& set dd=31)
if...続きを読む

Qsed で \ を含む文字列に置換

現在、非常に多数のドキュメントの整形を LaTeXを使って自動的に行っています。
問題となっている処理のエッセンスを抜き出すと次のようなもので、テンプレートファイル中の __PATTERN__ という文字列を、その都度指定する文字列($string)に置換した後にplatexでコンパイルする、という流れです。

----------
#!/bin/bash
sed "s/__PATTERN__/$string/" < template.tex > document.tex
platex document.tex
----------

問題は、$string に '_'(アンダーバー)が含まれるケースで、platexのコンパイルでエラーが発生します。
これを回避するには、'_' を '\_' に置換する必要がありますが、上記処理の前に、$string 中の '_' を '\_' に置換する処理を加えても、上記処理の段階で '\' が消えてしまいます。

肝は sed でのエスケープのやり方だと思うのですが、どうにもうまく行きませんので、お知恵を拝借できればと思います。

なお、tex ファイル中、__PATTERN__ は、他のコマンドの引数内で使用されているため、\verb+ + で囲むという手段も使えません。

現在、非常に多数のドキュメントの整形を LaTeXを使って自動的に行っています。
問題となっている処理のエッセンスを抜き出すと次のようなもので、テンプレートファイル中の __PATTERN__ という文字列を、その都度指定する文字列($string)に置換した後にplatexでコンパイルする、という流れです。

----------
#!/bin/bash
sed "s/__PATTERN__/$string/" < template.tex > document.tex
platex document.tex
----------

問題は、$string に '_'(アンダーバー)が含まれるケースで、platexのコンパイル...続きを読む

Aベストアンサー

""中なら \ は \\ とクォートしないとダメですね.
ちなみに「$string 中の '_' を '\_' に置換する」のはどんな処理ですか?

Qカンマ区切りのCSVファイルから""を削除したい

初めて質問いたします

以下のような形式のCSVファイルがあります
例)
品名,数量,単価,金額
"りんご",1,150,150
"バナナ",10,200,2000
"メロン","1,000","2,000","2,000,000"

上記のように、品名にはダブルクォーテションがつき、
数量、単価、金額については桁区切りのカンマが発生する場合、ダブルクォーテーションで囲まれています

上記のようなデータを
りんご,1,150,150
バナナ,10,200,2000
メロン,1000,2000,2000000
のように別ファイルへ出力するにはどのようにすればよいでしょうか?

プログラムでの処理で、WSHを使ったものを教えていただけますと、幸いです
よろしくお願いいたします

Aベストアンサー

もう仕事は終わってしまったかもしれませんが、(^^ゞ
VBS で作ってみました。
対象CSVファイルのあるフォルダに保存して実行してみてください。
_NewFilesフォルダに保存されます。
※対象外のCSVファイルが有っても処理してしまいます

Dim oSh
Dim oFs
Dim BaseFolder
Dim newFolder
Dim f

Set oSh = CreateObject("Wscript.Shell")
Set oFs = CreateObject("Scripting.FilesystemObject")
Set BaseFolder = oFs.getFolder(oSh.currentDirectory)

newFolder = BaseFolder.Path & "\" & "_NewFiles"

If oFs.folderExists(newFolder) = False Then
oFs.createFolder (newFolder)
End If

For Each f In BaseFolder.Files
If oFs.GetExtensionName(f) = "csv" Then
Call changeIt(f.Path, newFolder)
End If
Next

MsgBox newFolder & " フォルダ内を検証"


Sub changeIt(orgFname, trgFolder)
Dim oFs
Dim orgF
Dim newF
Dim newFname
Dim buF
Dim oReg

Dim Mcol
Dim M
Dim M1, M2
Const forReading = 1
Const forWriting = 2

Set oFs = CreateObject("Scripting.fileSystemObject")
Set oReg = CreateObject("VBScript.RegExp")
Set orgF = oFs.getFile(orgFname).openAsTextStream(forReading)

newFname = trgFolder & "\" & oFs.getBaseName(orgFname) & "_New.csv"
oFs.CreateTextFile (newFname)
Set newF = oFs.getFile(newFname).openAsTextStream(forWriting)

With oReg
.Pattern = """.*?"""
.IgnoreCase = False
.Global = True
End With

Do Until orgF.atendofstream
buF = orgF.readline
Set Mcol = oReg.Execute(buF)

For Each M In Mcol
M1 = Replace(M.Value, ",", "")
buF = Replace(buF, M.Value, M1)
M2 = Replace(M1, Chr(34), "")
buF = Replace(buF, M1, M2)
Next

newF.WriteLine buF
Loop

orgF.Close: newF.Close
Set Mcol = Nothing
Set oReg = Nothing

End Sub

もう仕事は終わってしまったかもしれませんが、(^^ゞ
VBS で作ってみました。
対象CSVファイルのあるフォルダに保存して実行してみてください。
_NewFilesフォルダに保存されます。
※対象外のCSVファイルが有っても処理してしまいます

Dim oSh
Dim oFs
Dim BaseFolder
Dim newFolder
Dim f

Set oSh = CreateObject("Wscript.Shell")
Set oFs = CreateObject("Scripting.FilesystemObject")
Set BaseFolder = oFs.getFolder(oSh.currentDirectory)

newFolder = Bas...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング