从批处理脚本ini文件更改标志

问题描述 投票:1回答:3

我有一个脚本,将检查文件名和文件的内容是相同与否,下面是代码,它工作正常

ECHO OFF
CLS
for %%i in (C:\Users\f1ym41a\Documents\deep\*.DAT) do (
fc C:\Users\f1ym41a\Documents\deep\MOVE.DAT %%i > NUL
if errorlevel 1 (
        CALL :error
        echo C:\Users\f1ym41a\Documents\deep\MOVE.DAT and %%i are different >>output.log
    ) ELSE (
        CALL :next
        echo C:\Users\f1ym41a\Documents\deep\MOVE.DAT and %%i are same >>output.log
    )
timeout 5
)
PAUSE

我需要做的是,如果文件名是相同的,然后它会改变的标志在ini文件1.下面是ini文件(deep.ini)

[INI]
flag = 0

由于我是新来的一批脚本。有人可以帮我这个?

batch-file
3个回答
0
投票

您可以尝试replacer.bat

call replacer.bat move.dat "flag = 0" "flag = 1"

0
投票

这是一个容易实现的任务使用由戴夫·贝纳姆书面JREPL.BAT这是一个批处理文件/ JScript的混合运行使用的JScript文件的正则表达式替换。

@echo off
if not exist "%USERPROFILE%\Documents\deep\MOVE.DAT" goto :EOF
if not exist "%~dp0jrepl.bat" goto :EOF

call "%~dp0jrepl.bat" "^(flag *= *)0" "$11" /F "%USERPROFILE%\Documents\deep\MOVE.DAT" /O -

该批处理文件首先检查是否修改该文件存在于所有并立即退出,如果这个条件是不正确的,看到Where does GOTO :EOF return to?

该批处理文件JREPL.BAT必须存储在同一目录中与上面的代码中的批处理文件。由于这个原因,批处理文件检查接下来如果JREPL.BAT在批处理文件和退出的目录,如果这个条件是不正确的确实存在。

正则表达式搜索字符串的含义是:

  • ^ ......发现在一行的开头
  • ( ... ) ......引用替换字符串中的字符串$1保持发现改变的字符串,这部分
  • flag ...区分大小写字符串flag
  •  * ... 0或多个空格
  • = ......和一个等号
  •  * ...并再次0或多个空格
  • 0 ......和字符0

替换字符串返回引用行和字符0的开始之间找到字符串$1和替换由0 1

对于理解使用的命令以及它们如何工作,打开命令提示符窗口中,执行有下面的命令,并阅读完全针对每个命令非常仔细地显示所有帮助页面。

  • call /? ...解释了也%~dp0 ...驱动器和参数0,这始终是一个反斜杠结束批处理文件路径的路径。
  • echo /?
  • goto /?
  • if /?
  • jrepl.bat /?

0
投票

![enter image description here ::第一个需要删除的字符串中的一些可能的空间得到了更多的精度时对它们进行比较:“flag = 0”将成为“flag=0”,没有space并没有tab

::第二的做到这一点,用这个"'(2个字符)设置使用“=”到字符串,而不是一个特殊字符的变量,通过set "'=flag=0”(很老的技术!)

::第三平等对待,治疗制表符,并删除它,因为有些时候,这是一个无形的,可能的字符,最终可能会出现在文件DAT,看到在这个问题上10878138

:: 4通过字符串从文件通过文件,一行一行地比较字符串...

::精细您需要替换文件中的行(.DAT或.INI)这部分I'm真的很迷惑,但代码是以上,对不起,如果我的错误!

观测值:用这种“flag = 0”的转化这这一个“flag=0”,仅用于处理对比操作中,蜿蜒的%%i匹配标志= 0,则仅改变了通过标志= 1,蝙蝠,这里的特定的事情是,以取代将文件FC命令在没有其它文件循环for比较%% I,由相同的文件。

@echo off && setlocal EnableExtensions EnableDelayedExpansion

set "'=flag=0"
set _file_new_flag1="%temp%\Flag1.dat"
set _path_to_dats=C:\Users\f1ym41a\Documents\deep\

for /f "delims= " %%T in ('forFiles /p "." /m "%~nx0" /c "cmd /c echo(0x09"') do set "_tab=%%T"

type nul >output.log && set "_tab=%_tab:~0,1%"

cd /d "!_path_to_dats!"

for /f "tokens=* delims= " %%x in ('dir /o-d /on /b "*.dat"') do (

     if defined _file_new_flag ( 

         move /y "!_file_new_flag1!" "!_file_now!"

         set _file_now=<nul
         set "_file_now=%%~x"

        ) else (

         set "_file_now=%%~x"

        )

     call :_file_compare_:

    )

 endlocal & goto :_end_of_file_:

 :_file_compare_:

 for /f "tokens=* delims= " %%X in ('type "!_file_now!"') do (

     for /f "tokens=* delims= " %%i in ('echo/"%%~X"') do (

         set "_to_compare=%%~i"

         call set "_to_compare=!_to_compare: =!"

         for /f "tokens=* delims=" %%I in ('echo/%_tab%') do call set "_to_compare=!_to_compare:%%I=!"

         if ["!_to_compare!"] equ ["%'%"] ( 

             echo/C:\Users\f1ym41a\Documents\deep\MOVE.DAT and %%i are same >>output.log
             echo/%%~i>>!_file_new_flag1!

            ) else (

             echo/C:\Users\f1ym41a\Documents\deep\MOVE.DAT and %%i are different >>output.log
             echo/flag = 1>>!_file_new_flag1!

            )

         timeout /t 5

         set _to_compare=<nul

        ) 

    ) 

exit /b 

:_end_of_file_:

很抱歉我的英语。

© www.soinside.com 2019 - 2024. All rights reserved.