Хорошо, я пытаюсь написать пакет, чтобы «захватить» серийный номер для пользователя. Серийный номер поступает из другой системы, и нам приходится периодически вводить серийный номер вручную. Я хотел бы, чтобы пользователь запустил пакетный файл, который добавит 1 и заменит старый номер, а затем выведет «Ваш серийный номер ##», где ## - новый номер. Я почти уверен, что смогу справиться с эхо-частью и записью во временный файл и перезаписью старого файла, но это средняя часть, с которой я борюсь. XML-файл, который редактируется, это:
<?xml version="1.0"?>
<BatchSettings xmlns:xsi="https://w3.org/2001/XMLSchema-instance" xmlns:xsd="https://w3.org/2001/XMLSchema">
<SerialFormat>{0:yyMMdd}{1:00}</SerialFormat>
<LastSerialDate>2020-05-27T00:00:00-05:00</LastSerialDate>
<LastSerialNumber>10</LastSerialNumber>
</BatchSettings>
номер, который мне нужно изменить, - это ## между "lastserialnumber" <LastSerialNumber>10</LastSerialNumber>
. Я пробовал несколько разных подходов, и этот первый близок, но определенно не сигарный.
@echo off
set /a "replace=10"
set /a "replaced=replace+1"
set "source=Test.txt"
set "target=Test2.txt"
setlocal enableDelayedExpansion
(
for /F "tokens=1* delims=:" %%a in ('findstr /N "^" %source%') do (
set "line=%%b"
if defined line set "line=!line:%replace%=%replaced%!"
echo(!line!
)
) > %target%
endlocal
Проблема с этим в том, что число не всегда будет «10», и я также не хочу заменять все остальные экземпляры «10» в файле.
я тоже пробовал
@Echo Off
Set "SrcFile=Test.txt"
Set "OutFile=Test2.txt"
@echo off
setlocal enableextensions disabledelayedexpansion
(for /f "delims=" %%a in (%SrcFile%
) do for /f "tokens=2 delims=1234567890 " %%b in ("%%~a"
) do if not "%%b"==":" (
echo(%%~a
) else for /f "tokens=1 delims= <LastSerialNumber>:" %%c in ("%%~a"
) do (
set /a "n=%%c+1"
setlocal enabledelayedexpansion
echo(<LastSerialNumber>!n!:
endlocal
)) > %OutFile%
но это не увеличивает число и обрезает оставшийся текст. а этот просто хлам, который вообще не работает.
@Echo Off
Set "SrcFile=Test.txt"
Set "OutFile=Test2.txt"
setlocal EnableDelayedExpansion
(for /F "delims=" %%a in ('findstr /I /L "<LastSerialNumber>" %SrcFile%') do (
set "line=%%a
set "line=!line:*<LastSerialNumber>=!"
for /F "delims=<" %%b in ("!line!") do echo %%b+1
)) > %oldnumber%
set "newnumber=%oldnumber%+1"
(
for /F "tokens=1* delims=:" %%a in ('findstr /N "^" %SrcFile%') do (
set "line=%%b"
if defined line set "line=!line:%oldnumber%=%newnumber%!"
echo(!line!
)
) > %OutFile%
endlocal
%~1
на путь к входному файлу (если вы просто ставите чистое имя файла, оно относится к текущему рабочему каталогу; если вы ставите префикс%~dp0
, оно относится к родительскому каталогу скрипта). Чтобы определить выходной файл (например,set "_OUTF=..."
таким же образом), заключите весь блок циклаfor /F
в другую пару круглых скобок и добавьте> "%_OUTF%"
в конце)
... 29.05.2020