我有一个脚本,它将检查文件名和文件内容是否相同,下面是代码,它工作正常
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
由于我是批处理脚本的新手。有人可以帮我吗?
答案 0 :(得分:0)
您可以尝试使用replacer.bat:
call replacer.bat move.dat "flag = 0" "flag = 1"
答案 1 :(得分:0)
使用由 Dave Benham 编写的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 /?
答案 2 :(得分:0)
:: 1st 需要在字符串中删除一些可能的空间以提高精度
比较它们时:“
flag = 0
” 将变为“ flag=0
” ,否
space
,没有 tab
。
:: 第二,为此,请使用此 "'
(2个字符)来设置一个变量
使用“ = ”来字符串化而不是特殊的字符,
由 set "'=flag=0
” (非常古老的技术!)
:: 第3 次,请稍等,将制表符删除,因为有些时候 这是一个看不见的可能的角色,最终可能会发生 在文件dat中,请参见此问题10878138
:: 第4 个字符串,逐个文件,逐行比较字符串...
:: 精确您需要在文件(.dat或.ini)中替换行,这部分确实让我感到困惑,但是上面的代码对不起,如果出现我的错误!
obs:将此“ flag = 0
” 的转换与此“ flag=0
” 一起使用,仅用于处理比较操作, %%i
匹配标志= 0,然后仅更改为用标志= 1替换为文件,蝙蝠,这里要特别说明的是,命令fc正在循环比较同一文件中的%% i for
,没有其他文件。
@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_:
因此对不起,关于我的英语。