Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 相同的批处理代码在第二次尝试中成功运行,为什么在第一次尝试中失败_Batch File - Fatal编程技术网

Batch file 相同的批处理代码在第二次尝试中成功运行,为什么在第一次尝试中失败

Batch file 相同的批处理代码在第二次尝试中成功运行,为什么在第一次尝试中失败,batch-file,Batch File,我使用notepad++保存了这段代码 在命令提示符中接收到的输出: 文件名、目录名或卷标语法不正确。 该命令的语法不正确。 创建 文件名、目录名或卷标语法不正确。 Thunderbird的子目录或文件已存在 在这里,Thunderbird文件夹是在bat文件存在的地方创建的,但是它应该是在驱动器D的“BackupEmail”文件夹中创建的 当我在同一命令提示符下再次运行它时,它成功运行 该特性表明,在第一次执行时,有一个变量不是set,而是正在使用它的值-通常在if语句中。但是,第一次执行是为

我使用notepad++保存了这段代码

在命令提示符中接收到的输出:

文件名、目录名或卷标语法不正确。 该命令的语法不正确。 创建 文件名、目录名或卷标语法不正确。 Thunderbird的子目录或文件已存在

  • 在这里,Thunderbird文件夹是在bat文件存在的地方创建的,但是它应该是在驱动器D的“BackupEmail”文件夹中创建的
  • 当我在同一命令提示符下再次运行它时,它成功运行

  • 该特性表明,在第一次执行时,有一个变量不是
    set
    ,而是正在使用它的值-通常在
    if
    语句中。但是,第一次执行是为变量建立一个值,因此在第二次运行时,语法是正确的

    通常在
    @echo off
    之后立即包含
    setlocal
    命令。这样可以确保在代码完成后,放弃对环境所做的任何更改。在这种情况下,由于没有
    setlocal
    命令,因此变量的值将保留在第二次运行中

    代码的问题在于#1常见问题-请使用
    搜索
    工具搜索
    延迟扩展
    。执行
    if“%YesNo%”==“6”
    指令时,变量
    文件夹
    未建立,因此在第一次执行时
    %folder%
    没有值,但它在
    代码块中被分配了一个值,并在第二次运行时保留该值(因为没有
    selocal
    来丢弃它).

    此特征表明,在第一次执行时,有一个变量未设置,但正在使用它的值-通常在
    if
    语句中。但是,第一次执行是为变量建立一个值,因此在第二次运行时,语法是正确的

    通常在
    @echo off
    之后立即包含
    setlocal
    命令。这样可以确保在代码完成后,放弃对环境所做的任何更改。在这种情况下,由于没有
    setlocal
    命令,因此变量的值将保留在第二次运行中

    代码的问题在于#1常见问题-请使用
    搜索
    工具搜索
    延迟扩展
    。执行
    if“%YesNo%”==“6”
    指令时,变量
    文件夹
    未建立,因此在第一次执行时
    %folder%
    没有值,但它在
    代码块中分配了一个值,并在第二次运行时保留该值(因为没有
    selocal
    来丢弃它)。

    谢谢@Magoo。我已经实现了setlocal,现在可以工作了。谢谢@Magoo。我实现了setlocal,它现在正在工作。
    @echo off
    Call :YesNoBox "Press yes or no"
    
    if "%YesNo%"=="6" (
    
    set backupdir=D:\BackupEmail\
    cd /d %backupdir%
    
    set folder=%date:~10,4%_%date:~4,2%_%date:~7,2%_%time:~0,2%_%time:~3,2%_%time:~6,2%
    
    mkdir %folder%
    
    echo %folder% created
    
    cd /d %folder%
    
    mkdir Thunderbird
    
    cd Thunderbird
    
    set backupcmd=xcopy /s/h/i/c/k/e/r/y
    
    echo ### Backing Up ... 
    
    %backupcmd% "C:\Users\username\AppData\Roaming\Thunderbird\*" "%backupdir%\%folder%\Thunderbird\"
    
    echo Backup Completed!
    
    echo "Deleting Temp files".
    del /s /f /q  \Windows\Temp\*.*
    
    cmd /k 
    )
    exit
    
    :: Design for pop up window
    exit /b
    :YesNoBox
    REM returns 6 = Yes, 7 = No. Type=4 = Yes/No
    set YesNo=
    set MsgType=4
    set heading=%~2
    set message=%~1
    echo wscript.echo msgbox(WScript.Arguments(0),%MsgType%,WScript.Arguments(1)) >"%temp%\input.vbs"
    for /f "tokens=* delims=" %%a in ('cscript //nologo "%temp%\input.vbs" "%message%" "%heading%"') do set YesNo=%%a
    exit /b
    
    :MessageBox
    set heading=%~2
    set message=%~1
    echo msgbox WScript.Arguments(0),0,WScript.Arguments(1) >"%temp%\input.vbs"
    cscript //nologo "%temp%\input.vbs" "%message%" "%heading%"
    exit /b