2016-06-22 22 views
0

,無論我插入爲docopy,程序總是將文件從源文件複製到目標文件。 有誰知道如何解決它?我想在插入'y'後複製文件,如果插入'n'則跳過它。當然,我試過如果其他語句,但它也沒有正常工作。畢竟,程序應該詢問要重命名的文件的哪一部分。 我敢肯定,這很容易讓你:)如果批量編號爲

set source="C:\Users\Desktop\Basic" 
set destination="C:\Users\Desktop\CopyofBasic" 
set renfiles="C:\Users\Desktop\CopyofBasic" 

setlocal EnableDelayedExpansion 


set /p docopy="Do You want to copy files? [Y/N]: " 

if /i %%docopy%% == "%y%" (
    goto :makecopy 
    ) 
if /i %%docopy%% == "%n%" (
    goto :nagative 
    ) 

:makecopy 
    xcopy /s /v /h /k /z %source% %destination% 
    goto :renfiles 
:negative 
    echo None files are copied. 
    goto :renfiles 

:renfiles 
cd %renfiles% 
set /p var1="Insert part of filename to replace it: " 
set /p var2="Insert new part of filename: " 
set /p var3="Insert files fomrat: " 

for /r %%G in (%var3%) do (
    set "filename=%%~nxG" 
    ren "%%G" "!filename:%var1%=%var2%!" 
) 

echo Filenames have been already changed. 
pause 

回答

0

考慮使用choice和測試errorlevel而不是set /p

http://ss64.com/nt/choice.html

CHOICE /M Do you want to copy files? [Y/N] 
IF errorlevel 2 goto nagative 
IF errorlevel 1 goto makecopy 
1

有2個問題:

  • 個的條件是不正確的:

    if /i %%docopy%% == "%y%" 
    
    docopy物具有Ñ

    正在評估到:if /I %docopy% == "" (goto :makecopy)這是假因此它被跳過。下一個條件同樣發生,所以批處理文件中的下一個「指令」是:makecopy標籤。

  • 錯字goto:nagative(性否定)

的條件應該如何看起來像:用"(或[])爲變量後衛,但不是%):

if /i "%docopy%" == "y" (
    goto :makecopy 
    ) 
if /i "%docopy%" == "n" (
    goto :negative 
    ) 

@ EDIT1 :更正了@aschipfl注意到的條件評估。

+0

不,「if/i %% docopy %% ==」%y%「'評估爲」if/i%docopy%==「」'; '%% docopy %%'由於雙'%'-signs而變成了字符串'%docopy%',並且''%y%'''變成了'「」'作爲變量'y'未定義。 ..一般情況下,我建議總是使用'「」'爲了避免像'&','^','<', '>','''... – aschipfl

+0

這樣的特殊字符出現問題你是對的@aschipfl,謝謝你發現它。我從錯誤的程序運行中複製/粘貼評估字符串(在我對自己做了一些更改之後的中間狀態)。 – CristiFati