【问题标题】:How do I properly handle spaces in file names passed as arguments to a PowerShell script via a SendTo shortcut?如何正确处理通过 SendTo 快捷方式作为参数传递给 PowerShell 脚本的文件名中的空格?
【发布时间】:2012-12-27 19:51:25
【问题描述】:

我编写了一个(非常)简单的脚本,将当前日期附加到 PowerShell 中的给定文件名,并设置了一个 SendTo 快捷方式以便于访问。

但是,它不能很好地处理带有空格的文件名。如果文件名是 "thisFile.txt" 它会正确添加日期,使其成为 "thisFile.txt.20121227",但如果文件名是 "这个 File.txt" 在我设置的 SendTo 快捷方式中不起作用。

不过,这两种类型的文件名都可以在命令行中使用,我一直在摸不着头脑,试图找出原因。

这是我一直在使用的sn-p代码:

$enddate = (Get-Date).toString("yyyyMMdd")
$filename = $arg

foreach ($filename in $args) {
    Rename-Item $filename $filename"."$enddate
}

这是在我设置的快捷方式的目标字段中:

"%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe " -NonInteractive  -WindowStyle Hidden -NoProfile -noexit &"C:\Scripts\adddate.ps1"

【问题讨论】:

  • 哪个版本的windows?
  • 对不起,忘了说。我使用的是 64 位 Windows 7 Pro。

标签: powershell sendto


【解决方案1】:

【讨论】:

  • 谢谢!像魅力一样工作。出于好奇,两者之间有什么区别?我知道& 是呼叫操作员,但是-f 是做什么的呢?
  • 我可以把你推荐给powershell /? :]
  • 当然。 =) 再次感谢!
【解决方案2】:

您可能想要进行一些调试。

我敢打赌,您的带空格的文件名将被拆分为一个数组。

在您的 for 循环中,将 $filename 变量的输出写入文件。您可能会发现您需要在脚本中添加一些逻辑,上面写着“嘿,这没有扩展名!我需要在该区域添加更多项目,直到这是一个带扩展名的文件名!”,或者可能直到“测试路径 $filename” 返回 true。

【讨论】:

  • 感谢您的帮助。我已经将$filename 的内容输出到了一个 .txt 文件,看起来它正在截断名称的前半部分,所以 "this file.txt" 就变成了 "file。 txt"。 不幸的是,我不完全确定如何让它处理字符串而不截断它。
  • 酷。您似乎没有将 %1 指定为目标中的参数。试试这个:"%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe " -NonInteractive -WindowStyle Hidden -NoProfile -noexit &"C:\Scripts\adddate.ps1 %1"
  • 所以我添加了 %1 作为参数,它仍然给我相同的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 2022-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
  • 2017-07-28
相关资源
最近更新 更多