【问题标题】:Passing a node.js script an argument with a space on Windows在 Windows 上向 node.js 脚本传递一个带有空格的参数
【发布时间】:2012-08-30 17:46:13
【问题描述】:

我正在 Windows 上从命令行运行节点脚本,并尝试传入包含空格的文件夹路径。当通过 require 模块或 process.argv 变量访问这个参数时,我似乎没有得到我期望的结果。对于以下命令:

node script.js "C:\path\to\folder\with a space\"

我似乎得到了以下值:

process.argv[2] = C:\path\to\folder\带空格\"

注意字符串中结尾的"。如果参数不带引号传递,它显然将其作为在空格上分割的不同参数传递。

是我做错了什么,还是这是一个错误?如果它是一个错误,是否有可能的解决方法?

【问题讨论】:

    标签: node.js arguments


    【解决方案1】:

    尾随反斜杠转义引号,然后再次由 shell 隐含(而不是由于缺少右引号而中止)。

    解决方法只是用另一个反斜杠转义该反斜杠或完全省略它:

    C:\Users\myself> python -c "import sys; print sys.argv[1]" "foo\bar\"
    foo\bar"
    C:\Users\myself> python -c "import sys; print sys.argv[1]" "foo\bar\\"
    foo\bar\
    

    请注意,您只能以这种方式转义 last 反斜杠 - 字符串中的任何其他反斜杠都不会充当转义字符:

    C:\Users\myself> python -c "import sys; print sys.argv[1]" "foo\\bar\\"
    foo\\bar\
    

    【讨论】:

    • 哇,我真的很愚蠢,没有考虑到这一点。感谢您的帮助。
    • 责备 great cmd.exe shell 忽略了明显不正确的引用。
    • 这不是 shell 错误。如果您通过不涉及 shell 的 CreateProcess WInApi 函数运行 Node,您将在 Node.js 中遇到相同的问题。此外,如果您在 Windows cmd shell 中运行以下命令,您将得到预期的结果:find "\root\" log.txt。但是您可能会在 PowerShell 中发现同样的问题。巧合的是,Node 和 PowerShell 有同样的问题。
    猜你喜欢
    • 2015-03-28
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多