1

私のソースファイルはすべて、パスが。という名前の変数に含まれている1つのフォルダーにあります$template。各ファイルは異なる宛先に送られるため、正確なファイル名を指定する必要があります。

私の目標は、ファイル名を変数に連結することです。

例:

$template = "D:\source\templatefiles\"

Filename1は次のとおりです: "graphic-183.jpg"

私が試してみました:

Join-Path $template graphic-183.jpg

cliでこれを発行すると、私が望むことを実行できるように見えます。

しかし、ファイルごとに新しい変数を作成する以外に、この連結されたファイルパスを参照するにはどうすればよいですか?それはそれほど単純ではありません-ファイルがどこに行くかを決定するファイル名に応じて、リストを次に進みます。

私はケースelse、elseIfをいじっていますが、確かにこれほど難しいことではありません。

肝心なのは、各ファイル名の前にフォルダーパスを付け、宛先をハードコーディングすることです。これは、スクリプトが実行されるたびに常に同じになるためです。


編集

これをどのように使用しようとしているのかを説明するのを忘れたので、これを編集しました。

私のスクリプトでは、次のような行を使用する予定です。

Copy-Item -Path $template filename.ext -Destination $destfolder

$templateファイル名に結合しようとしているのは、上記で強調表示されている部分です。

アドバイスありがとうございます。

-=ブルース・D・マイヤー

4

2 に答える 2

3

多分これはあなたが望むものですか?

次のように、かっこを使用してコマンドレットをその場で呼び出すことができます。

Copy-Item -Path (Join-Path $template filename.ext) -Destination $destfolder

これにより、PowerShell は「引数モード」から「式モード」に移行します。つまり、Join-Pathコマンドレットの出力を式として返します。

はい、David と Ansgar の提案も役に立ちます。これを試して、完全なパスのみを取得してください。

(get-childitem $template) | select fullname
于 2012-11-14T05:53:38.837 に答える
1

次のようにパスを作成できます。

$template = "D:\source\templatefiles\"
Copy-Item -Path "${template}filename.ext" ...

ただし、David の提案が問題のより良い解決策になると思います。ハッシュテーブルを使用してファイル名を宛先フォルダーにマップし、次のようにすることができます。

$locations = @{
  "foo" = "C:\some",
  "bar" = "C:\other",
  ...
}

Get-ChildItem $template | % { Copy-Item $_ $location[$_.Name] }
于 2012-11-13T23:04:57.357 に答える