IF NOT EXIST 在 Windows 批次中不工作

IF NOT EXIST not working in Windows Batch

我正在尝试在 windows 批处理文件中插入一个“如果不存在”,其中另一个具有相同格式的类似 IF 正在工作 - 无法说明为什么在研究和测试后这个失败。

第二个如果不存在按预期工作当第一个被 REMd 输出时

格式相同,定义%INIFile%

@echo off
setlocal EnableExtensions Enabledelayedexpansion
set "TODAY=%Date:~4,2%-%Date:~7,2%-%Date:~12,2%"
set "NOW=%time:~0,2%.%time:~3,2%.%time:~6,2%"
set "TempFile=%TEMP%\%~n0.tmp"
set "INIFile=Parameters_INI.ini"

if not exist ".\%INIFile%" (
    echo ERROR: List file "%INIFile%" not found.
    echo ERROR: List file "%INIFile%" not found.>>%LogFile%
    goto :EndBatch
)

:: Get Parameters
call :get-ini %INIFile% Parameters ListFile result
Set "ListFile=%result%"    
call :get-ini %INIFile% Output LogName result
Set "LogFile=%result%_%EntryName%_%TODAY%_T%NOW%_Log.txt"


Echo INI File Updater
Echo PC List: %ListFile%
Echo PC List: %ListFile%>>%LogFile%
    
if not exist ".\%ListFile%" (
    echo ERROR: List file "%ListFile%" not found.
    echo ERROR: List file "%ListFile%" not found.>>%LogFile%
    goto :EndBatch
)
goto :EndBatch

:get-ini <filename> <section> <key> <result>
  set %~4=
  set insection=
  for /f "usebackq eol=; tokens=*" %%a in ("%~1") do (
    set line=%%a
    if defined insection (
      for /f "tokens=1,* delims==" %%b in ("!line!") do (
        if /i "%%b"=="%3" (
          endlocal
          set %~4=%%c
          goto :eof
        )
      )
    )
    if "!line:~0,1!"=="[" (
      for /f "delims=[]" %%b in ("!line!") do (
        if /i "%%b"=="%2" (
          set insection=1
        ) else (
          endlocal
          if defined insection goto :eof
        )
      )
    )
  )

:EndBatch
endlocal
pause

Parameters_INI.ini

[Parameters]
ListFile=PCList.txt
Target=SMSStart.ini
TarDIR=Storeman
SectionName=[Maintenance]
EntryName=Reboot
NewValue=1

[Output]
LogName=INI_Update

PCList.txt

LAB-LANE005
LAB-LANE006
LAB-LANE001
LAB-LANE007
LAB-LANE008
    echo ERROR: List file "%ListFile%" not found.>>%LogFile%

您似乎从未将 LogFile 设置为一个值,因此如果未设置,则此行在结束时自行解析为 >> 时将失败行是无效语法,即使它不是 运行.

如果您在批处理文件之前或在批处理文件的第一行中设置 LogFile,其余部分应该有效。