2017-04-20 121 views
0

我正在嘗試爲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

那麼你遇到什麼問題?批處理文件無法正常工作或replacetool無法正常工作?你有錯誤嗎? –

+0

務必註釋掉或刪除任何和所有@ECHO OFF語句。輸出是否表明任何事情都不正確?編輯問題以複製並粘貼任何錯誤消息。 – lit

回答

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\*)("*")

這裏是固定的代碼,使用絕對路徑:

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 
)