繁体   English   中英

连接两个字符串以形成现有变量

[英]Concatenate two strings to form an existing variable

我有一个包含多个 PDF 的文件夹,我需要打印到不同的打印机。 我为每台共享打印机创建了变量,并且根据 PDF 的前 2 个字母,打印将 go 打印到匹配的打印机。

我在连接 2 个字符串以形成现有变量以便稍后在打印调用中使用它时遇到问题。

这就是我现在所拥有的(目录中的所有 PDF 都以 01 开头):

# SumatraPDF path
$SumatraExe = "C:\Users\Administrador.WIN-FPFTEJASDVR\AppData\Local\SumatraPDF\SumatraPDF.exe"
# PDFs to print path
$PDF = "C:\Program Files (x86)\CarrascocreditosPrueba2\CarrascocreditosPrueba2\DTE\BOL"

# Shared printers list
$01 = '\\192.168.1.70\epson'
$02 = '\\192.168.1.113\EPSON1050'

cd $PDF

While ($true) {
    Get-ChildItem | Where {!$_.PsIsContainer} | Select-Object Name | %{
    $Boleta = $_.Name
    $CodSucursal = $Boleta.Substring(0,2)
    $CodImpresora = '$' + $CodSucursal
    Write-Host $CodImpresora -> This shows literal $01 on PS ISE
    Write-Host $01 -> This show the shared printer path
    }
    Start-Sleep -Seconds 5
}

# Actual PDF printing...
#& $SumatraExe -print-to $CodImpresora $PDF

所以基本上我需要调用一个基于 2 个字符串的现有变量。 可能这可以通过 Switch 实现,但这将过于广泛。

连接 2 个字符串以形成现有变量

这在 PowerShell 中不起作用,变量标记总是按字面意思处理。

我建议您改用哈希表:

# Shared printers table
$Impresoras = @{
  '01' = '\\192.168.1.70\epson'
  '02' = '\\192.168.1.113\EPSON1050'
}

然后在循环内:

$Boleta = $_.Name
$CodSucursal = $Boleta.Substring(0,2)
$Impresora = $Impresoras[$CodSucursal]

尽管语言语法不支持变量变量名称,但您可以使用Get-Variable cmdlet 按名称解析变量:

# Returns a PSVariable object describing the variable $01
Get-Variable '01' 

# Returns the raw value currently assigned to $01
Get-Variable '01' -ValueOnly

...或通过查询Variable: PSDrive:

# Same effect as `Get-Variable 01`
Get-Item Variable:\01

虽然存在这些替代方案,但我强烈建议不要在脚本中使用它们 - 它们速度慢,使代码更难以阅读,而且我认为我从未遇到过使用哈希表或数组最终并不容易:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM