2012-09-11 108 views
1

我想創建一個批處理文件,讀取spefic目錄中的前10個文件名,然後將路徑設置爲10個不同的變量。舉個簡單的例子,路徑爲c:\ test,裏面會出現很多文件名爲file1.tif,file2.tif等我想設置變量filepath1等於第一個文件的路徑是c:\ test \ file1.tif,依此類推爲前10個文件。下面是代碼:讀取文件名和

@echo off 
cd C:\TEST 
setlocal ENABLEDELAYEDEXPANSION 
FOR /f "delims=|" %%a IN ('dir /b') DO (
    CALL SET /a x = !x! +1 
    if !x! == 1 (
     CALL SET /a filepath!x!="C:\TEST\%%a" 
    ) 
) 
echo %filepath1% 
echo %filepath2% 
pause 
goto EOF 

當我運行程序,它似乎執行FOR循環很好,但對於filepath1它顯示只是0,它不會顯示任何filepath2。我相信問題是在if !X! == 1和設置filepath!x!。如果我改變任何與!x!有關的事情,它會打破循環。我能做些什麼來正確設置變量並限制循環只對10個文件執行操作?

回答

1

我不太清楚,如果我得到你的問題是正確的,因爲你的原單代碼包含一些事情,是沒有意義的,然後(或者至少沒有必要):-)

  • 的「 delims = |」您使用的選項在您的案例中沒有做任何事情
  • /a選項用於算術(請參閱help set)並且在與set filepath!x!...一行使用時出錯。

不管怎樣,下面應該工作:

setlocal ENABLEDELAYEDEXPANSION 
cd C:\Test 
FOR /f %%a IN ('dir /b') DO (
    SET /a x = !x! +1 
    SET filepath!x!="C:\TEST\%%a" 

    if !x! equ 10 goto done 
) 
:done 
rem filepath1 to filepath10 are defined now, given there were up to 10 matching 
rem files in the first place. 

echo %filepath1% 
echo %filepath2% 

pause 

上面的代碼不做任何錯誤檢查和不檢查有問題的文件居然叫file1.tiffile10.tif。從你的問題(和示例代碼)來看,在你的情況下這是否真的很不明確。您可能想澄清一下,以便上面的代碼可以改進。