Пакетный скрипт для проверки содержимого и имени файла - PullRequest
0 голосов
/ 11 января 2019

У меня есть код в пакетном скрипте, который проверит, совпадает ли имя файла или содержимое файла одинаково или нет. Также он обновит INI-файл до 0 или 1 0 - если имена файлов разные 1 - если имена файлов разные

Ниже мой код

@ECHO OFF
CLS
del /s C:\deep\output.log > NUL
for %%i in (C:\deep\*.DAT) do (
for /f "tokens=1,2 delims= " %%G in (app.ini) do set %%G=%%H
echo Rungmis %rungmis%
fc C:\deep\MAI_ZSYS_MOVE.DAT %%i > NUL
if errorlevel 1 (
        CALL :error
        echo C:\deep\MAI_ZSYS_MOVE.DAT and %%i are different >>output.log
        set /a rungmis=0
        echo Rungmis %rungmis%
        timeout 5
    ) ELSE (
        CALL :next
        echo C:\deep\MAI_ZSYS_MOVE.DAT and %%i are same >>output.log
        set /a rungmis=1
        echo Rungmis %rungmis%
        timeout 5
    )
)

for %%I in (rungmis) do (
 setlocal enabledelayedexpansion
 type app.ini | find /v "%%I=">settings.tmp
 move /y settings.tmp gmisapp.ini
 echo %%I=!%%I!>>app.ini

)
type app.ini
timeout 5

Он обновляет флаг .ini (флаг rungmis) до 0 или 1. Но проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда обновляется ini, флаг (rungmis) обновляется в последней строке ini * 1006. *

Фактический файл app.ini

[TO_RUN_GMIS]
rungmis=1
;0 means GMIS will run
;1 means GMIS will not run


[Registry_Directories]
ArchivePath=D:\maibackup\
ImportPath=D:\gmisdata\
ExportPath=D:\www\GMIS\excel\
DataSource=GMIS_DEV_NEW

app.ini после обновления

[TO_RUN_GMIS]
;0 means GMIS will run
;1 means GMIS will not run


[Registry_Directories]
ArchivePath=D:\maibackup\
ImportPath=D:\gmisdata\
ExportPath=D:\www\GMIS\excel\
rungmis=1

Может кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 11 января 2019

Пожалуйста, попробуйте.

@ECHO OFF
CLS
del /s C:\deep\output.log > NUL
for %%i in (C:\deep\*.DAT) do (
for /f "tokens=1,2 delims= " %%G in (app.ini) do set %%G=%%H
echo Rungmis %rungmis%
fc C:\deep\MAI_ZSYS_MOVE.DAT %%i > NUL
if errorlevel 1 (
        CALL :error
        echo C:\deep\MAI_ZSYS_MOVE.DAT and %%i are different >>output.log
        set /a rungmis=0
        echo Rungmis %rungmis%
        timeout 5
    ) ELSE (
        CALL :next
        echo C:\deep\MAI_ZSYS_MOVE.DAT and %%i are same >>output.log
        set /a rungmis=1
        echo Rungmis %rungmis%
        timeout 5
    )
)


for /f "tokens=*" %%a in ('type "app.ini" ^| find /v /n "" ^& break ^> "app.ini"') do (
    set "str=%%a"
    setlocal enabledelayedexpansion
    set "str=!str:*]=!"
    if "!str:~0,7!"=="rungmis" set "str=!str:~0,-1!%rungmis%"
    >>app.ini echo(!str!
    endlocal
)

type app.ini
timeout 5

Таким образом, мы просто делаем тип для файла и добавляем некоторые дополнительные символы, чтобы гарантировать, что мы также копируем новые строки. Затем мы избавляемся от этих символов перед печатью в файл. Но сначала мы ищем строку rungmis и заменяем ее значение значением, которое вы определили ранее в скрипте. Затем каждая строка печатается обратно в файл app.ini со значением замены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...