每次运行这个.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%"
答案 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