2013-04-15 258 views
0

我有一個重命名* .txt文件,並刪除第X字符停止批處理文件只處理最後一個文件?

@Echo Off 

for %%i in ("*.txt") do (
    set fname=%%i 
    echo %fname% 
    copy %fname% %fname:~9% 
) 

但是下面這個簡單的批處理文件,它只是處理的最後一個文件?如果我有4個文件,最後一個文件被複制4次?

我需要做什麼?

回答

4

問題是,當首次分析循環時,%var%被替換爲變量的值,並且在執行期間不會更改。

這裏有一個演示應該使你可以解決您的代碼:

@ECHO off&setlocal&CLS 
ECHO Demonstrating the use of %%var%% IN a block 
ECHO. 
SET var=Original value 
ECHO Before the block, %%var%%=%var% 
FOR %%i IN (1 2 3) DO (
    SET var=New value %%i 
    ECHO loop %%i : %%var%%=%var% 
) 
ECHO After the block, %%var%%=%var% 
ECHO. 
ECHO BECAUSE the block is first PARSED, then executed. 
ECHO in the parsing process, %%var%% is replaced by its 
ECHO value as it stood when the block was parsed - BEFORE execution 
ECHO. 
ECHO now try using a SETLOCAL ENABLEDELAYEDEXPANSION command first: 
ECHO. 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET var=Original value 
ECHO Before the block, %%var%%=%var% and ^^!var^^!=!var! 
FOR %%i IN (1 2 3) DO (
    SET var=New value %%i 
    ECHO loop %%i : %%var%%=%var% BUT ^^!var^^!=!var! 
) 
ECHO After the block, %%var%%=%var% and ^^!var^^!=!var! 
ECHO. 


哦,這麼多的插入記號!一個不識字的兔子的天堂。

脫字符(^)「逃脫」字的特殊含義跟隨 - 除了%由另一% 逃脫這樣 - 行

ECHO Before the block, %%var%%=%var% 

什麼是呼應是「前塊「,然後單個%,文本var,另一單%=the value of var

SETLOCAL ENABLEDELAYEDEXPANSION第e字符!成爲特殊字符。所以

ECHO Before the block, %%var%%=%var% and ^^!var^^!=!var! 

ECHO loop %%i : %%var%%=%var% BUT ^^!var^^!=!var! 

附加一個單一!,字符串var,另一單!=the run-time value of var因爲在分析時,將^^^替換,然後將所得^!被解釋在執行時間作爲文字!!var!在PARSE時間保持不變,但在執行時替換爲值var

+0

謝謝!尤其對於教我而不僅僅是修復。順便說一句:克拉的^^^做什麼?那是逃避'!'的方法嗎? – BlueChippy

+0

你的意思是'ECHO在塊之前,%% var %% =%var%和^^^!var ^^^!=!var!'?還有一個'暫停'結尾? – user2033427

+0

+1,很好的解釋,我正要把'嘗試使用延遲擴展',然後在我看到你的答案時使用延遲擴展的代碼。 – user2033427