在命令行中使用批处理文件编辑栅格

时间:2017-04-20 07:00:45

标签: windows batch-file cmd

我正在尝试为Windows命令行编写一个批处理文件,将0的值转换为1.我可以轻松更改数字,但我正在努力处理批处理文件的过程。我希望批处理文件搜索3度的文件夹以查找要处理的图像。到目前为止我有...... 更新:问题似乎已经解决。但是作为参考,批处理文件似乎没有工作,没有错误消息,只是没有输出。

for %%y in (D:\Data\imageA\20*) do (
    cd %%y
    for %%m in (\%%y\*) do (
        cd %%m
        for %%d in (\%%m\*) do (
            cd %%d
            for %%f in (imageA_*_raster) do replacetool %%f %%f_new 0 1
            cd ..
        ) 
        cd ..
    )
    cd ..
)

1 个答案:

答案 0 :(得分:0)

  1. 要枚举目录而不是文件,您需要使用for /D
  2. 在所有路径周围加上引号,例如"D:\Data\imageA\20*"。使用~变量引用的for修饰符可避免双引号。
  3. 删除cd命令,改为使用绝对路径,应用~F修饰符,例如for /D %%m in ("%%~Fy\*") do ( ... )
  4. 如果您坚持使用相对路径(如果replacetool需要此类路径),请使用pushd "%%~y"代替cd %%ypopd代替cd ..,并将(\%%y\*)更改为("*")
  5. 以下是使用绝对路径的固定代码:

    for /D %%y in ("D:\Data\imageA\20*") do (
        for /D %%m in ("%%~Fy\*") do (
            for /D %%d in ("%%~Fm\*") do (
                for %%f in ("%%~Fd\imageA_*_raster") do replacetool "%%~Ff" "%%~Ff_new" 0 1
            )
        )
    )
    

    以下是使用相对路径的代码:

    for /D %%y in ("D:\Data\imageA\20*") do (
        pushd "%%~y"
        for /D %%m in ("*") do (
            pushd "%%~m"
            for /D %%d in ("*") do (
                pushd "%%~d"
                for %%f in ("imageA_*_raster") do replacetool "%%~f" "%%~f_new" 0 1
                popd
            )
            popd
        )
        popd
    )