Более сложную строку Заменил, а более простую - нет. Куда копать ?

Обсуждение программы nhrt - замена текста в файлах (прежнее название nhrplc)
Ответить
Absolum
Сообщения: 16
Зарегистрирован: 27 дек 2021, 02:50

Более сложную строку Заменил, а более простую - нет. Куда копать ?

Сообщение Absolum »

Привет. Нужно делать замены в этом коде:

@echo off
setlocal enabledelayedexpansion

mkdir "T:\Games\Auto\Race Driver GRID ENG 1.3\MODSZ\[Car] - (350) - Nissan 350Z\cars\350"
ping -n 2 127.0.0.1 > nul
SET tar_folder=T:\Games\Auto\Race Driver GRID ENG 1.3\MODSZ\[Car] - (350) - Nissan 350Z\cars\350
SET src_folder=T:\Games\Auto\Race Driver GRID ENG 1.3\cars\nsx
set "search=nsx"
set "replace=350"
set "file=T:\Games\Auto\Race Driver GRID ENG 1.3\MODSZSoft\AnyCarChanger\CMDtemp\350FirstCar.txt"
ping -n 1 127.0.0.1 > nul

if exist "%file%" (
for /f %%a IN ('dir "%src_folder%" /b') do move "%src_folder%\%%a" "%tar_folder%\"
ping -n 3 127.0.0.1 > nul
for /r "%tar_folder%" %%a in (*%search%*) do (
set "name=%%~na"
set "name=!name:%search%=%replace%!"
ren "%%~fa" "!name!%%~xa"
)
cd "T:\Games\Auto\Race Driver GRID ENG 1.3\cars"
rd /s /q "%src_folder%"
sleep 2
ren "T:\Games\Auto\Race Driver GRID ENG 1.3\cars\nsxOriginal" "%search%"
ping -n 2 127.0.0.1 > nul
rem echo The file "%file%" exists.
nircmdc trayballoon "Hi" "Cars Undo Changed !" "shell32.dll,-154" 3000
ping -n 15 127.0.0.1 > nul
nircmdc trayballoon "Hi !" "Car Ready to dffgfgd !" "shell32.dll,-154" 10000
ping -n 12 127.0.0.1 > nul
) else (
nircmdc trayballoon "Hello" "Flag File Absent ! No replacements have taken place !" "shell32.dll,-154" 3000
)
exit




Такие строки заменились у меня:

@if %showdh%!==! start "" /D"C:\Temp" "hiderun.exe" "C:\Temp\nhrt.exe" -cp:oem,oem -set:"MODSZ\[Car] - (350) - Nissan 350Z\cars\350" -t:"MODSZ\[Car] - (sup) - Toyota Supra\cars\sup" "T:\Games\Auto\Race Driver GRID ENG 1.3\MODSZSoft\AnyCarChanger\CMDtemp\CarTemplateUNDO\*.cmd"
C:\temp\sleep.exe 2
@if %showdh%!==! start "" /D"C:\Temp" "hiderun.exe" "C:\Temp\nhrt.exe" -cp:oem,oem -set:"search=nsx" -t:"search=je4" "T:\Games\Auto\Race Driver GRID ENG 1.3\MODSZSoft\AnyCarChanger\CMDtemp\CarTemplateUNDO\*.cmd"
C:\temp\sleep.exe 2
@if %showdh%!==! start "" /D"C:\Temp" "hiderun.exe" "C:\Temp\nhrt.exe" -cp:oem,oem -set:"replace=350" -t:"replace=sup" "T:\Games\Auto\Race Driver GRID ENG 1.3\MODSZSoft\AnyCarChanger\CMDtemp\CarTemplateUNDO\*.cmd"
C:\temp\sleep.exe 2
@if %showdh%!==! start "" /D"C:\Temp" "hiderun.exe" "C:\Temp\nhrt.exe" -cp:oem,oem -set:"350FirstCar" -t:"supFirstCar" "T:\Games\Auto\Race Driver GRID ENG 1.3\MODSZSoft\AnyCarChanger\CMDtemp\CarTemplateUNDO\*.cmd"


А такие не хотят заменяться. Почему ?

@if %showdh%!==! start "" /D"C:\Temp" "hiderun.exe" "C:\Temp\nhrt.exe" -cp:oem,oem -set:"cars\nsxOriginal" -t:"cars\je4Original" "T:\Games\Auto\Race Driver GRID ENG 1.3\MODSZSoft\AnyCarChanger\CMDtemp\CarTemplateUNDO\*.cmd"
C:\temp\sleep.exe 2
@if %showdh%!==! start "" /D"C:\Temp" "hiderun.exe" "C:\Temp\nhrt.exe" -cp:oem,oem -set:"cars\nsx" -t:"cars\je4" "T:\Games\Auto\Race Driver GRID ENG 1.3\MODSZSoft\AnyCarChanger\CMDtemp\CarTemplateUNDO\*.cmd"
Absolum
Сообщения: 16
Зарегистрирован: 27 дек 2021, 02:50

Re: Более сложную строку Заменил, а более простую - нет. Куда копать ?

Сообщение Absolum »

решил задачку с помощью проги

http://findandreplace.io/command-line

она из Гуи может сформировать строку command-line


p.s. Но с nhrt - тоже хотелось бы разобраться (на будущее)
nhutils
Сообщения: 594
Зарегистрирован: 09 дек 2009, 18:08
Контактная информация:

Re: Более сложную строку Заменил, а более простую - нет. Куда копать ?

Сообщение nhutils »

Добрый день,
Параметр -set обрабатывает ESC-последовательности \n, \t и т.д. как специальные символы (перевод строки, табуляция соответственно), а не как два обычных символа \ и n.
Поэтому если в обычном тексте встречаются такие последовательности, то поиск по -set не найдёт их.

В строке поиска вижу \n в пути к файлу, выделил цветом.
А такие не хотят заменяться. Почему ?

@if %showdh%!==! start "" /D"C:\Temp" "hiderun.exe" "C:\Temp\nhrt.exe" -cp:oem,oem -set:"cars\nsxOriginal" -t:"cars\je4Original" "T:\Games\Auto\Race Driver GRID ENG 1.3\MODSZSoft\AnyCarChanger\CMDtemp\CarTemplateUNDO\*.cmd"
Если ESC-последовательности не используются, то вместо -set проще использовать параметр -spt.

Код: Выделить всё

-spt:"cars\nsxOriginal"
Или же, если по какой-то причине нужно использовать именно -set, то в частях текста, которые не должны обрабатываться как спецсимволы, нужно «экранировать» обратную наклонную черту, указав её два раза:

Код: Выделить всё

-set:"cars\\nsxOriginal"
Absolum
Сообщения: 16
Зарегистрирован: 27 дек 2021, 02:50

Re: Более сложную строку Заменил, а более простую - нет. Куда копать ?

Сообщение Absolum »

Спасибо большое !

Работает !

Ваша утилита на фоне остальных выглядит значительно привлекательнее, потому что умеет заменять сразу несколько замен используя лист замен.
Ответить