无法使用带有空格的完整路径运行.bat文件

4

我知道这个问题看起来很傻,但我正在努力运行.bat文件。我有一个位于以下路径的.bat文件。 C:\ Realtime Data Export Tool \ 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 命令。Javascript 构建此字符串并打开命令提示符以运行批处理文件。因此,我想在单个命令中完成这个操作,其中包括 .bat 文件的完整路径。 请问有人能帮忙吗?

1
"添加引号:"C:\Realtime Data Export Tool\ExportTool\BatchFiles\ExportData.bat"" - Adriano Repetti
谢谢。仅使用双引号运行"path/.bat"是正常的。但我必须将命令行参数传递给.bat文件。当我再次在双引号中包含参数时,出现相同的错误。:( - JoseJospeh
1
命令行参数必须保持在引号之外(否则它们将被解释为文件路径的一部分,而不是它的参数)。 - Adriano Repetti
3个回答

4
编辑 - 一个解决方案:
C:\Realtime Data Export Tool\ExportTool\BatchFiles\ExportData.bat "DNCORR" "SYSTEM" "SYSTEM123" "SYNC" "TEST"

... Javacsript constructs this string and opens commandpromt to run the batch file...

换句话说,它必须调用cmd /Ccmd /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 命令(首选)
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”。因此,我的答案符合当前的标签! - JosefZ
经过24小时的寻找解决方案,这已经是我的最后一招了。非常感谢。 - Dheeraj Kumar

0

我找到了解决方案。它正在工作。我应该构建类似于命令字符串:

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

感谢帮助。


0

你只需要在批处理文件的路径和文件名周围加上引号...如果需要,保持参数周围的引号。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接