在CMD中使用if条件

时间:2013-12-10 14:05:20

标签: batch-file if-statement cmd conditional-statements

编辑:我已根据npocmaka和magoo的建议解决了我的问题。既然我明白这是造成这种情况的缩进,你们能否建议我将来如何使我的代码更清洁?

这是我的蝙蝠档案:

    @echo off
    setlocal enabledelayedexpansion

    rem set lang pre-requisites
    rem Purpose can be 'test' or 'deploy'
    SET purpose="test"
    SET lang="English-India"
    SET lang_code="EnIn"

    rem if purpose is test then the folder will be EnInP101M2Tsub, if purpose is deploy then EnInP101M2DFull
    if "%purpose%"=="test"( SET folder=="%lang_code%P101M2Tsub" )
    else if "%purpose%"=="deploy"( SET folder=="%lang_code%P101M2DFull" )

    rem set required paths here
    SET audio="C:\Users\Administrator\..path..\%lang%\%purpose%\BGM\M2\%folder%\*.wav"
    SET source="C:\Users\Administrator\Downloads\Matt_Trial\..path..\%lang%\%purpose%\BGM\M2"
    SET target="C:\Users\Administrator\Downloads\Matt_Trial\..path..\%lang%\%purpose%\BGM\M3\*"

    rem copying the data
    xcopy  %source% %target% /e /i /h
    rem copying audio files into the other folders
    for /d %%a in (%target%) do copy %audio% "%%a"

    rem renaming M3 folders
    cd %target%
    for /d %%a in (*) do (
      set "p=%%a"
      set "fp=!p:~0,8!" & set "tp=!p:~10!"
      ren %%a !fp!M3!tp!
    )

**为了您的理解** 我的父文件夹(M1,M2,M3)中有2个文件夹。 步骤1:我将M2中的内容复制到新文件夹M3。 第2步:我需要将具有音频的M2下的文件夹内容复制到M3中的所有文件夹中。 第3步:我重命名M3下的文件夹。

我希望自己清楚明白。 我必须根据设定变量找出音频路径。我需要if条件部分的帮助。截至目前我一直在获取系统找不到指定的文件。请帮忙!!

3 个答案:

答案 0 :(得分:3)

一些错误。

SET将在 = EXCEPT之后包含,如果您使用`SET”var = data“,它将用于确保行不包括在分配的数据中。

= 之后的任何字符都会被包含在内(如果批量具有特殊含义,则某些字符需要'转义',因此set var==data将包含第二个 = < / kbd>在分配的数据中。

你没有陷入变量空间陷阱 - 语法set var =data将设置一个名为var space 的变量而不是var。

IF语句的第二个操作数与(如果使用)

之间必须有一个空格(我认为是严格的分隔符)

类似地,ELSE子句必须是 Space else Space - 全部在同一行。这个字符序列不能被破坏。

IF,您正在使用"%purpose%"purpose我们设置为"test"后,这将被评估为""test"",这可能是{{1}}令人困惑,因此除非你有充分的理由,否则你的数据中不包括

答案 1 :(得分:1)

此:

  @echo off
    setlocal enabledelayedexpansion

    rem set lang pre-requisites
    rem Purpose can be 'test' or 'deploy'
    SET purpose="test"
    SET lang="English-India"
    SET lang_code="EnIn"

    rem if purpose is test then the folder will be EnInP101M2Tsub, if purpose is deploy then EnInP101M2DFull
    if "%purpose%"=="test"( SET folder=="%lang_code%P101M2Tsub" )
    else if "%purpose%"=="deploy"( SET folder=="%lang_code%P101M2DFull" )

应该看起来像(因为你只有两个选项..)

   @echo off
    setlocal enabledelayedexpansion

    rem set lang pre-requisites
    rem Purpose can be 'test' or 'deploy'
    SET "purpose=test"
    SET "lang=English-India"
    SET "lang_code=EnIn"

      rem if purpose is test then the folder will be EnInP101M2Tsub, if purpose is deploy then EnInP101M2DFull
       if "%purpose%"=="test" (  
        SET "folder=%lang_code%P101M2Tsub" 
       ) 

       if "%purpose%"=="deploy" ( 
         SET "folder=%lang_code%P101M2DFull"
       )

       echo %folder%
       endlocal

您无法使用else开始一行,并且使用双=设置无效。并且您的比较不正确,因为您在变量值中有引号。

答案 2 :(得分:1)

我还没有50个代表,所以不得不通过回答发表评论。

当我遇到批处理文件问题时,我发现对REM@ECHO OFF行有帮助。

然后创建批处理文件的快捷方式,并更改“目标”字段以将输出通过管道传输到文本文件。

因此,如果您的批次位于C:\ test \ mybatch.bat,则在C:\ test \

中创建批次的快捷方式

接下来,右键单击快捷方式,然后选择“属性”。 在“快捷方式”选项卡下,将以下内容添加到目标字段中文本的末尾。 >>output.txt

运行快捷方式,将所有命令和错误保存到output.txt文件,您可以在其中查看导致问题的原因,例如未设置变量。