следующий пакет работает хорошо, пока комментарий "следующее не работает должным образом", я пробовал любой вид%; %%,! вокруг переменных, но всегда терпят неудачу, либо не имеют ничего или ошибок!
rem @ECHO OFF
ECHO %~dp0
ECHO %~dpnx0
SET fileNameForWMIC=
SET "7ZAEXE=7za.exe"
SET "SOURCE=C:\Program Files (x86)\my prog\PFM\*.*"
SET "LOCATION=C:\Program Files (x86)\my prog\PFM"
SET "TARGET=PFM.7z"
SET "REFFILE=NEWPFM.7z"
SET "IMPFILE=verPFM.txt"
setlocal enabledelayedexpansion
SET 7ZAEXE=%~dp0!7ZAEXE!
ECHO !7ZAEXE!
SET TARGET=%~dp0!TARGET!
ECHO !TARGET!
SET REFFILE=%~dp0!REFFILE!
ECHO !REFFILE!
SET IMPFILE=%~dp0!IMPFILE!
ECHO !IMPFILE!
rem "!7ZAEXE!" a "!TARGET!" @"!IMPFILE!"
rem the whole directory
rem for /D %%X in ("!SOURCE!") do !7ZAEXE! a "!TARGET!" "%%X"
rem only the important files listed in text file
FOR /F "usebackq skip=1 tokens=1,2 delims=," %%G IN ("%IMPFILE%") DO (
echo %%G version %%H
SET fileNameForWMIC=%%G
SET GoodVer=%%H
SET "fileNameForWMIC=!fileNameForWMIC:\=\\!"
ECHO !fileNameForWMIC!
ECHO Goodver !GoodVer!
rem the following do not perform as expected
setlocal enabledelayedexpansion
FOR /F "usebackq skip=1" %%I IN (`wmic datafile where Name^="!fileNameForWMIC!" get Version ^| findstr /r /v "^$"`) DO (
SET "filever1=%%~I"
ECHO( !filever1!
)
IF /I NOT ["!filever1!"] == ["%GoodVer%"] (
ECHO "%fileNameForWMIC%" have version^=!filever1! instead of %GoodVer%
"!7ZAEXE!" a "!TARGET!" "%fileNameForWMIC%"
SET /A NbError+=1
) ELSE ( "!7ZAEXE!" e "!REFFILE!" -o!LOCATION! "%fileNameForWMIC%" -r)
)
вот несколько строк verPFM.txt
Name Version
c:\program files (x86)\my prog\pfm\intl.dll,0.18.1.0
c:\program files (x86)\my prog\pfm\libeay32.dll,1.0.1.16
c:\program files (x86)\my prog\pfm\libl1sa.dll,1.2.0.1
Сначала он правильно читает имя файла и версию, расположенную в файле verpfm.txt, но второй For/F не может получить переменную fileNameForWMIC, поэтому восстановление не может быть завершено.
Пакетный файл находится в каталоге, куда я помещаю также 7za.exe для сжатия и файл verPFM.txt.
NewPFM.7z содержит файл, указанный в файле verPFM.txt, целью пакета является проверка того, что все файлы, перечисленные в файле verPFM.txt и расположенные в "LOCATION", имеют ту же версию, что и в списке, если не совпадают с файлом в LOCATION в архив PFM.7z и замените его на тот, что в NewPFM.7z
Я надеюсь построить окончательный пакет с обратной опцией, чтобы восстановить файл, сохраненный в PFM.7z
Как это исправить ?? 1000 заранее спасибо