Этот скрипт принимает два параметра:
@ECHO OFF
:: set working names
SET "fname=%~1"
SET "dname=%~2"
:: get the text file's line count
SET cnt=0
FOR /F "usebackq" %%C IN ("%fname%") DO SET /A cnt+=1
:: split the text file, storing the last line separately from the other lines
IF EXIST "%fname%.tmp" DEL "%fname%.tmp"
(FOR /L %%L IN (1,1,%cnt%) DO (
SET /P line=
IF %%L==%cnt% (
CALL ECHO %%line%%>"%fname%.tmplast"
) ELSE (
CALL ECHO %%line%%>>"%fname%.tmp"
)
)) <"%fname%"
:: append file names to 'the other lines'
FOR %%F IN ("%dname%\*.jpg") DO ECHO %%~nF>>"%fname%.tmp"
:: concatenate the two parts under the original name
COPY /B /Y "%fname%.tmp" + "%fname%.tmplast" "%fname%"
:: remove the temporary files
DEL "%fname%.tmp*"
Часть get the text file's line count
просто перебирает все строки, увеличивая счетчик.Вы можете использовать другой подход, если вы точно знаете, на что похожа последняя строка, или если вы знаете, что она должна содержать определенную подстроку (даже если это всего один символ).В этом случае вы можете заменить цикл FOR, использованный выше, на этот цикл FOR:
FOR /F "delims=[] tokens=1" %%C IN ('FIND /N "<i>search term</i>" ^<"%fname%"') DO SET cnt=%%C
, где search term
- термин, которому может соответствовать последняя строка.