语法命令错误

时间:2014-11-28 02:50:25

标签: windows batch-file cmd syntax-error

每次运行这个.bat文件时,它都会继续给我一个"语法错误命令"。关于如何解决这个问题的任何想法?

if !numFiles! gtr 2 (
   gdal_merge.py -n 0 -a_nodata -32767 -of GTiff -o %out_path%\A!yearDay!.a1_file.file.tif !fileList!
   set "fileList=!fileList:~0,-1!"
   move !fileList: =,! "%proc_path%"

1 个答案:

答案 0 :(得分:3)

好的,因为您已将问题缩小到以下块:

if !numFiles! gtr 2 (
   gdal_merge.py -n 0 -a_nodata -32767 -of GTiff -o %out_path%\A!yearDay!.a1_file.file.tif !fileList!
   set "fileList=!fileList:~0,-1!"
   move !fileList: =,! "E:\Proc\Proc_Pro"
)

cmd.exe无法识别该块中的特定行,您需要对其进行更改(暂时)以将其与特定行隔离。将代码部分更改为:

if not !numFiles! GTR 2 goto xyzzy
  echo AAA xx!fileList!xx
  gdal_merge.py -n 0 -a_nodata -32767 -of GTiff -o %out_path%\A!yearDay!.a1_file.file.tif !fileList!
  echo BBB xx!fileList!xx
  set "fileList=!fileList:~0,-1!"
  echo CCC xx!fileList!xx
  echo DDD xx!fileList: =,!xx
  move !fileList: =,! "E:\Proc\Proc_Pro"
:xyzzy

然后再次使用echo on运行它。以这种方式构造将允许cmd在执行之前输出单独的行,而不是整个if块。

这个以及添加的echo语句应该足以跟踪它。


在某些相关测试数据上执行了这些调试步骤之后,基本上归结为:

C:\USERS\pax\Documents>echo >qqq1
C:\USERS\pax\Documents>echo >qqq2
C:\USERS\pax\Documents>echo >qqq3
C:\USERS\pax\Documents>mkdir qqq
C:\USERS\pax\Documents>move qqq1,qqq2,qqq3 qqq
The syntax of the command is incorrect.

换句话说,move不允许您将多个以逗号分隔的文件移动到目标目录,尽管根据move /?的输出它似乎是可能的。

这是一个已知问题,您可以阅读here

你需要找到另一种方式。如果您可以保证文件名本身没有空格(如果有的话,您的原始解决方案无论如何都不会有效),您可以使用以下内容:

@setlocal enableextensions enabledelayedexpansion
@echo off

rem Clean up first.
del /s qqq1.txt qqq2.txt qqq3.txt >nul: 2>&1
rmdir /s /q qqq >nul: 2>&1

rem Make the files and directories.
echo >qqq1.txt
echo >qqq2.txt
echo >qqq3.txt
mkdir qqq

rem Set up space-separated list.
set filelist=qqq1.txt qqq2.txt qqq3.txt

rem Move the files, this is the important bit.
for %%f in (!filelist!) do move %%f qqq >nul: 2>&1

rem Check it worked.
dir qqq

@endlocal

其中大部分是测试工具,重要的是行:

for %%f in (!filelist!) do move %%f qqq >nul: 2>&1