2012-08-27 105 views
1

我無法圍繞DOS批處理文件的變量替換機制,尤其是在for循環中。批處理文件,循環中的變量擴展和子字符串

簡化批次問題:想象以下目錄
01foo.txt
02foo.dir(這是一個目錄)
bar01(這是一個目錄)
bar02(這是一個目錄)

我想將這個目錄下所有不以'bar'開頭的文件/目錄移動到bar + _the_first_2_characters_of_the_filename_or_directory_name的子目錄中。
在這種情況下,01foo.txt將被移入bar01,02foo.dir將被移入bar02。

下面的腳本是我第一次嘗試:

setlocal EnableDelayedExpansion 
for %%A in (*) do ( 
    set _x=%%A 
    if (!_x:~0,2! NEQ "bar") move %%A bar!_x:~0,2! 
) 
endlocal 
從事實

分開,這似乎僅環的文件,它根本不能工作:-)。 我在if語句中出現錯誤,說「3!此時意外」

有關如何改善情況/腳本的任何想法?

感謝

回答

2

這只是語法的一個問題...

IF聲明預計不會不接受周圍的括號。
!_x:~0,2!中的逗號打破了IF的說法,您可以引用這兩個部分或將其移入自己的set prefix=!_x:~0,2!"行。
如果您報價"bar"您還需要引用"!prefix!"

這是所有

setlocal EnableDelayedExpansion 
for %%A in (*) do ( 
    set "_x=%%A" 
    set "prefix=!_x:~0,2!" 
    if "!prefix!" NEQ "bar" move %%A bar!prefix! 
) 
endlocal 
相關問題