我有5000个相同的文件,我需要更新其内容中的数值并将其递增。下面是我用来查找和替换名为BULK_1.txt
的某个文件中的数字的批处理脚本。
我不确定在运行搜索和替换后如何增加该值。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set search=01118596270001
set replace=01118596270002
set "textFile=BULK_1.txt"
set "rootDir=C:\Batch"
for %%j in ("%rootDir%\%textFile%") do (
for /f "delims=" %%i in ('type "%%~j" ^& break ^> "%%~j"') do (
set "line=%%i"
setlocal EnableDelayedExpansion
set "line=!line:%search%=%replace%!"
>>"%%~j" echo(!line!
endlocal
)
)
endlocal
结果应如下所示。每个文件的后4位应从0001更新为5000
BULK_1.txt
的内容:
DMAIN Test_data 01118596270001
DDOC_DATA Test_docdata 01118596270001
BULK_2
的内容:
DMAIN Test_data 01118596270002
DDOC_DATA Test_docdata 01118596270002
BULK_3
的内容:
DMAIN Test_data 01118596270003
DDOC_DATA Test_docdata 01118596270003
答案 0 :(得分:0)
根据您的要求,您可能需要:
@echo off
setlocal EnableDelayedExpansion
for /L %%A IN (1 1 5000) do (
set num_processed=%%A
call:find_len num_processed
if !len! EQU 1 (set num_%%A=0111859627000%%A)
if !len! EQU 2 (set num_%%A=011185962700%%A)
if !len! EQU 3 (set num_%%A=01118596270%%A)
if !len! EQU 4 (set num_%%A=0111859627%%A)
)
for /L %%A IN (1 1 5000) do (
for /L %%B IN (1 1 2) do (
if %%B EQU 1 (
echo DMAIN Test_data !num_%%A!>BULK_%%A.txt
) else (
echo DDOC_DATA Test_docdata !num_%%A!>>BULK_%%A.txt
)
)
)
:find_len
set "s=!%~1!#"
set "len=0"
for %%P in (4 2 1) do (
if "!s:~%%P,1!" NEQ "" (
set /a "len+=%%P"
set "s=!s:~%%P!"
)
)
我的代码使用@jeb建议对https://docs.google.com/forms/d/e/1FAIpQLSfCnRaa4b1VuHhE4gVekWJc_V0Zt4XiTlsKsTipTlPg5ECA7Q/viewform进行稍微编辑的方式。
call
进入find_len
子例程即可。If
的字符串长度为1,则必须为0001
。前面的数字在所有情况下都是相同的。If
的字符串长度为2,则必须为0010
。前面的数字在所有情况下都是相同的。If
的字符串长度为3,则必须为0100
。前面的数字在所有情况下都是相同的。If
的字符串长度为4,则必须为1000
。前面的数字在所有情况下都是相同的。 注意:如果我们尝试类似于set /a 0000+1
的操作,则结果将为1
。这就是为什么所有这些都会变得复杂!。
在所有情况下,变量名称均为num_numberCurrentlyProcessed
。
BULK_num.txt
格式创建5000个文件。
If
在第1行,我们echo
由OP指定的特定文本。If
在第1行,我们再次echo
由OP指定的特定文本。答案 1 :(得分:0)
“我有5000个相同的文件”-从头开始编写它们比编辑每个文件要快得多:
@echo off
setlocal enabledelayedexpansion
set "Hdr=DMAIN Test_data 0111859627"
set "Dta=DDOC_DATA Test_docdata 0111859627"
for /l %%a in (1,1,5000) do (
set "num=0000%%a" REM prepend some zeros
set "num=!num:~-4!" REM take last four chars
>Bulk_%%a.txt (
echo %Hdr%!num!
echo %Dta%!num!
)
)