У меня есть пакетный файл, который занимает два, переименовывает первый файл с одним именем, а второй - другое имя. Переменная установлена в Y, а затем замедленное расширение используется для переменной в выражении if. Код читает в двух файлах из местоположения SOURCE и помещает местоположение SOURCE и имена файлов в txt-файл. Таким образом, файл будет выглядеть так: \ servername \ Reports \ 531627.REPORT.CSV \ servername \ Reports \ 531638.REPORT.CSV Затем код перебирает текстовый файл, копирует и затем переименовывает первый файл в REPORTLST и затем второй на REPORTAST. Происходит мысль, что это утверждение игнорируется. Я распечатал переменную FIRSTFILE, чтобы подтвердить, что это Y, и это только первый файл никогда не копируется и не переименовывается. Вот код:Если оператор игнорируется при использовании замедленного расширения
SetLocal EnableDelayedExpansion
@ECHO ON
if %1.==. (GOTO PARMERR) ELSE (SET ORIGFILENAME=%1)
if %2.==. (GOTO PARMERR) ELSE (SET SOURCE=%2)
if %3.==. (GOTO PARMERR) ELSE (SET DESTINATION=%3)
if %4.==. (GOTO PARMERR) ELSE (SET SMALLFILENAME=%4)
if %5.==. (GOTO PARMERR) ELSE (SET LARGEFILENAME=%5)
SET FIRSTFILE=Y
IF EXIST %SOURCE%dirlist.txt DEL %SOURCE%dirlist.txt
DIR %SOURCE%*%ORIGFILENAME% /B /S >> %SOURCE%DIRLIST.TXT
FOR /F "eol=; tokens=1* delims=," %%m in (%SOURCE%DIRLIST.TXT) DO (
ECHO !FIRSTFILE!
IF !FIRSTFILE! == "Y" (
COPY %%m %DESTINATION%%SMALLFILENAME%
ECHO "IN IF"
) else (
COPY %%m %DESTINATION%%LARGEFILENAME%
ECHO "IN ELSE"
)
ECHO !FIRSTFILE!
set FIRSTFILE=N
ECHO !FIRSTFILE!
)
del dirlist.txt
:RENAMEERROR
ECHO ****RENAME FAILED******
set err=4
GOTO END
:INVALIDSOURCE
ECHO ****cOULD NOT CD OR INVALID SOURCE******
set err=3
GOTO END
:INVALIDDESTINATION
ECHO ****cOULD NOT COPY OR INVALID DEST******
set err=2
GOTO END
:PARMERR
ECHO ****MISSING OR INVALID PARAMETER******
set err=1
GOTO END
set err=0
GOTO END
:END
EndLocal
exit /B %err%
А вот то, что печатается:
C:\Windows\system32>(
ECHO !FIRSTFILE!
IF !FIRSTFILE! == Y (
COPY \\servername\Reports\531627.REPORT.CSV \\servername\c$\Gateway\REPORTLST.csv
ECHO "IN IF"
) else (
COPY \\servername\Reports\531627.REPORT.CSV \\servername\c$\Gateway\REPORTAST.csv
ECHO "IN ELSE"
)
ECHO !FIRSTFILE!
set FIRSTFILE=N
ECHO !FIRSTFILE!
)
Y
1 file(s) copied.
"IN ELSE"
Y
N
C:\Windows\system32>(
ECHO !FIRSTFILE!
IF !FIRSTFILE! == "Y" (
COPY \\servername\Reports\531638.ATMRECON.CSV \\servername\c$\Gateway\REPORTLST.csv
ECHO "IN IF"
) else (
COPY \\servername\Reports\531638.ATMRECON.CSV \\servername\c$\Gateway\REPORTAST.csv
ECHO "IN ELSE"
)
ECHO !FIRSTFILE!
set FIRSTFILE=N
ECHO !FIRSTFILE!
)
N
1 file(s) copied.
"IN ELSE"
N
N
Таким образом, вы можете видеть, что это всегда происходит в ELSE, но я не могу увидеть, что проблема есть. Есть идеи?
Write 'IF == «Y» 'как' '' являются частью сравниваемых строк ... – aschipfl