使用变量从 PowerShell 打印 PNG 文件

Print a PNG-file from PowerShell using variables

我想从 PowerShell 脚本中打印 PNG 文件。 我可以通过插入图像的完整路径来使其工作,但我希望它是可变的。

这个有效:

Start-Process -filepath "C:\windows\system32\mspaint.exe" -argumentlist '/p "D:\simplecodegenerator55.png" /pt "Microsoft Print to PDF"'

但我无法让它与变量一起工作。

$photo = "5555.png"
$folder = "D:\simplecodegenerator\"

Start-Process -filepath "C:\windows\system32\mspaint.exe" -argumentlist '/p $folder$photo /pt "Microsoft Print to PDF"'

当我运行最后一个代码时会出现以下错误:

C:\Users\*****\$folder$photo.png 未找到。 我原以为它会保存为 D:\simplecodegenerator55.png

任何人都可以帮我解决这个问题,还是不可能做到?

当您在命令中使用变量时,使用 " 而不是 ' 作为命令的外部字符串。

例如:

$photo = "5555.png"
$folder = "D:\simplecodegenerator\"

Start-Process -filepath "C:\windows\system32\mspaint.exe" -argumentlist "/p $folder$photo /pt 'Microsoft Print to PDF'"

并且该方法将起作用。您的示例不起作用的原因是变量在传递给命令之前未在单引号内进行预处理,而在双引号内 PowerShell 会执行此预处理,用变量值替换变量。最终结果就是您所看到的,它在您当前目录中查找变量名称作为字符串。

这里有一些替代方案。

  1. 使用反引号字符转义打印机选项周围的附加双引号。这在您需要使用特定类型的引号的某些情况下很有用。
Start-Process -FilePath mspaint.exe -ArgumentList "/p $folder$photo /pt `"Microsoft Print To PDF`""
  1. 您不需要使用 Start-Process。这将 运行 仅对调用操作员有效。
& mspaint.exe /p $folder$photo /pt "Microsoft Print To PDF"
  1. 或者什么都没有。
mspaint.exe /p $folder$photo /pt "Microsoft Print To PDF"