如果批量声明

时间:2016-06-22 14:33:04

标签: batch-file

无论我作为docopy插入什么,程序总是将文件从源复制到目标。 有谁知道如何修复它? 我想在插入' y'之后复制文件如果' n'插入。当然,我试过if else声明,但它也没有正常工作。毕竟,程序应该询问要重命名的文件的哪个部分。 我确定你很容易:)

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

2 个答案:

答案 0 :(得分:1)

有两个问题:

  • 条件不正确:

    if /i %%docopy%% == "%y%"
    

    docopy的值为 n 时,评估为:if /I %docopy% == "" (goto :makecopy )这是错误的,因此被跳过了。下一个条件也发生了同样的事情,因此批处理文件中的下一个“指令”是:makecopy标签。

  • 拼写错误goto:nagative(nAgative)

条件应如何:使用"(或[])作为变量警卫,但不是%):

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

@ Edit1:将条件评估更正为@aschipfl注意到。

答案 1 :(得分:0)

考虑使用name="samlResponse"并测试choice而不是errorlevel

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

set /p