【问题标题】:Not able to run .bat file with complete path with spaces无法运行带有空格的完整路径的 .bat 文件
【发布时间】:2015-07-26 23:59:52
【问题描述】:

我知道这个问题看起来很傻,但我正在努力运行 .bat 文件。我有一个位于路径下方的 .bat 文件。 C:\实时数据导出工具\ExportTool\BatchFiles 注意根文件夹中的空格。 我正在尝试通过为路径添加前缀来直接运行 .bat 文件,如下所示:

C:\Realtime Data Export Tool\ExportTool\BatchFiles\ExportData.bat "DNCORR" "SYSTEM" "SYSTEM123" "SYNC" "TEST"

我遇到以下错误:

'C:\Realtime' 未被识别为内部或外部命令, 可运行的程序或批处理文件。

我不想执行“CD FolderPath”然后运行 ​​ExportData.bat。实际要求是我必须从 HTML 页面运行 windows 命令。 Javacsript 构造此字符串并打开 commandpromt 以运行批处理文件。所以我希望这可以在一个包含 .bat 文件的完整路径的命令中完成。 有人可以帮忙吗?

【问题讨论】:

  • 加引号:"C:\Realtime Data Export Tool\ExportTool\BatchFiles\ExportData.bat"
  • 谢谢。仅使用双引号运行“path/.bat”工作正常。但我必须将命令行参数传递给 .bat 文件。当我在双引号中包含 args 时,同样的错误再次出现。 :(
  • 命令行参数必须保留在 引号之外(否则它们将被解释为文件路径的一部分,而不是文件路径的参数)。

标签: windows batch-file cmd


【解决方案1】:

编辑 - 解决方案:

C:\Realtime Data Export Tool\ExportTool\BatchFiles\ExportData.bat "DNCORR" "SYSTEM" "SYSTEM123" "SYNC" "TEST"

... Javacsript 构造此字符串并打开 commandpromt 以运行 批处理文件...

换句话说,它必须调用cmd /C 或cmd /K 来打开命令提示符......在你的情况下:

cmd /C "C:\Realtime Data Export Tool\ExportTool\BatchFiles\ExportData.bat" "DNCORR" "SYSTEM" "SYSTEM123" "SYNC" "TEST"

不起作用,帮助 (cmd /?) 解释说,在这种情况下,第一个和最后一个引号被删除。因此,您的字符串可以是以下任何一种(不是详尽的列表,还有其他)使用:

- 附加引号

""C:\Realtime Data Export Tool\ExportTool\BatchFiles\ExportData.bat" "DNCORR" "SYSTEM" "SYSTEM123" "SYNC" "TEST""

- 替代引用

C:"\Realtime Data Export Tool\ExportTool\BatchFiles\ExportData.bat" "DNCORR" "SYSTEM" "SYSTEM123" "SYNC" "TEST"

-call command(首选)

call "C:\Realtime Data Export Tool\ExportTool\BatchFiles\ExportData.bat" "DNCORR" "SYSTEM" "SYSTEM123" "SYNC" "TEST"

- @ 符号

@"C:\Realtime Data Export Tool\ExportTool\BatchFiles\ExportData.bat" "DNCORR" "SYSTEM" "SYSTEM123" "SYNC" "TEST"

证明:

==>type "simple cli Parser.bat"
@echo  %%* = %*

==>"simple cli Parser.bat" "aa" bb
 %* = "aa" bb

==>cmd /C "simple cli Parser.bat" "aa" bb
'simple' is not recognized as an internal or external command,
operable program or batch file.

==>cmd /C ""simple cli Parser.bat" "aa" bb"
 %* = "aa" bb

==>cmd /C simple" cli Parser.bat" "aa" bb
 %* = "aa" bb

==>cmd /C call "simple cli Parser.bat" "aa" bb
 %* = "aa" bb

==>cmd /C @"simple cli Parser.bat" "aa" bb
 %* = "aa" bb

==>

原答案:

尝试下一批,看看参数是如何工作的:

@echo OFF >NUL
echo(
echo before any shift [%~1] [%~2] [%~3] [%~4]
echo   all %%* = %*
echo(
set /A "ii=0"
:loopfor
  echo param %%%ii% = %0
  SHIFT
  set /A "ii+=1"
  if not [%0]==[] goto :loopfor
echo(
echo after all shifts [%~1] [%~2] [%~3] [%~4]
echo   all %%* = %*

输出:

==>"D:\bat\cli Parser.bat" "a string with spaces" stringwithout spaces

before any shift [a string with spaces] [stringwithout] [spaces] []
  all %* = "a string with spaces" stringwithout spaces

param %0 = "D:\bat\cli Parser.bat"
param %1 = "a string with spaces"
param %2 = stringwithout
param %3 = spaces

after all shifts [] [] [] []
  all %* = "a string with spaces" stringwithout spaces

==>

资源(必读):

【讨论】:

  • 为什么投反对票?该问题仅标记为windows、batch-file 和cmd,而不是Javacsript。因此,我的答案是针对当前标签!
  • 经过 24 小时的寻求解决方案,这是我最后的选择。非常感谢。
【解决方案2】:

我找到了解决方案。正在运行。我应该构造类似的命令字符串:

cd C:\Realtime Data Export Tool\ExportTool\BatchFile & ExportData.bat "DNCORR" "SYSTEM" "SYSTEM123" "SYNC" "TEST"

感谢您的帮助。

【讨论】:

    【解决方案3】:

    您只需在批处理文件的路径和文件名周围添加引号...如果需要,请在参数周围保留引号。

    "C:\Realtime Data Export Tool\ExportTool\BatchFiles\ExportData.bat" "DNCORR" "SYSTEM" "SYSTEM123" "SYNC" "TEST"
    

    【讨论】:

      猜你喜欢
      • 2014-10-12
      • 1970-01-01
      • 2010-10-03
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多