Поиск и редактирование файла с пакетным файлом - PullRequest
1 голос
/ 15 сентября 2011

Я хотел бы иметь возможность редактировать текстовый файл с командным файлом. Это немного сложно из-за ряда вещей.

Во-первых, имя файла - frog.properties, и он прекрасно открывается в блокноте, но на компьютерах он запускается; тип файла .properties не связан с Блокнотом. Если файл нуждается в нем, можно создать ассоциацию, но я бы хотел этого избежать.

Во-вторых, текст, который нужно отредактировать, - это одна строка в файле. Первые 9 символов в строке, которую мы хотим отредактировать, являются уникальными для этой строки и останутся такими же после редактирования. Однако расположение этой строки в файле и то, что следует за ней в этой строке, зависит от компьютера. Строка может быть перемещена в файл без проблем, если ее нужно удалить и добавить в конец.

Пока я нашел код, указанный ниже, нашел здесь и немного его отредактировал. Прямо сейчас, когда я запускаю командный файл (с именем replace.cmd или replace.bat), он просто отображает «этот файл не существует» и выходит из приглашения. Я подтвердил, что файл находится в местоположении.

В будущем я хотел бы иметь возможность переработать этот код, чтобы легко использовать его для редактирования любого файла .ini или txt, просто изменив местоположение файла и текст для поиска и редактирования. Тип файла, из которого это может быть запущено, должен быть .bat или .cmd из-за среды, в которой я буду использовать это.

Спасибо.

@echo off
setlocal enabledelayedexpansion

if not exist "%1" (echo this file does not exist...)&goto :Failed


for /f "tokens=* delims=" %%a in (%1) do (

   set write=%%a
   if "%%a"=="%2" set write=%3

   echo !write! 
   (echo !write!)>>%~n1.replaced%~x1
)

replace "C:\Users\ME\Desktop\test.txt" "withquot=*" "withquot=it worked"

pause
:Failed
pause

ОБНОВЛЕНИЕ 09/20/2011

Прямо сейчас файл отобразит «этот файл не существует» и остановится. Поэтому я убрал строку if not exist "%1" (echo this file does not exist...)&goto :Failed

и я получаю

invalid Switch - "withquot=it worked"
Я попытался удалить «=» из неверного ключа, и я получил то же самое invalid switch Я попытался использовать set для установки отдельных переменных и изменил ссылки в файле. Я попытался переместить тестовый файл в корень C и изменить ссылку.

В настоящее время тестовый файл выглядит следующим образом

test file
withquot=didntwork
USING_LOCAL_SHARED_MEM=1

Ничто из того, что я делаю, не заставит этот файл работать, я, должно быть, упускаю что-то маленькое или иду в этом неправильном направлении. Я проверил файл в Vista и Windows 7. Что-то не так с файлом, который вы видите?

Итог, мне все равно, как, но я хочу иметь возможность редактировать TXT-файл с помощью пакетного файла и иметь возможность заменить строку.

Ответы [ 2 ]

0 голосов
/ 30 августа 2016

Это очень просто.Вы когда-нибудь слышали о добавлении> NUL в конце

pause

?ну,> NUL создает файл с именем NUL.просто введите

echo (text) >C:\Users\%userprofile%\Desktop\myfile.txt

, это также работает с созданием командного файла.«()» не нужны.чтобы добавить больше строк, просто наберите его так: «()» в этом случае необходимо.

(echo First line.
echo Second line.
echo Third line.) >C:\Users\%userprofile%\Desktop\myfile.txt

как это будет выглядеть:

First Line.
Second Line.
Third Line.

теперь для пакетных файлов:

(echo @echo off
echo echo Second line.
echo pause) >C:\Users\%userprofile%\Desktop\myfile.bat

при редактировании это будет выглядеть следующим образом:

@echo off
echo Second Line.
pause

и будет работать так:

Second Line.
Press any key to continue...

При настройке переменных имейте в видучто если, скажем, вы наберете

set /p "%password%=?"

, чтобы войти в новый файл, он снимет %% и сделает его просто "паролем".чтобы исправить это, вместо этого введите:

set /p "%%password%%=?"

, и он будет отображаться правильно.если вы установите переменную вне сборки нового пакетного файла, скажем

set /p "%password%=?"

и затем наберете

if not %password%==? goto whatever

ВНУТРИ нового пакетного файла, он установит пароль в одном файле,и затем он все равно будет равен в следующем, потому что он установил его до создания нового файла.Если это не совсем понятно, свяжитесь со мной, и я пришлю вам несколько примеров приложений, которые я сделал в прошлом, используя это.

0 голосов
/ 22 сентября 2011

Я все еще очень хочу знать, как это сделать в командном файле, но я нашел способ, используя скрипт vbs из здесь . используя файл .cmd или файл .bat, я продолжал сталкиваться с проблемой наличия = в поиске или замене, все портит.

Я изменил файл из этого местоположения на Цикл на Аргументах 2 на X, так что формат файла - Найти (0) Заменить на (1) в расположениях (2) и (3) и (4) ...

Option Explicit

Const ForReading = 1
Const ForWriting = 2
Dim Puppet, strOld, strNew, i
Puppet = 0
strOld = WScript.Arguments.item(0)
strNew = WScript.Arguments.item(1)
i = 1

On Error Resume Next
Do While i <= WScript.Arguments.count
    i = i + 1
    Call update(WScript.Arguments.item(i), strOld, strNew)
    Puppet = Puppet Or (Err.Number = 0): Err.Clear
Loop
On Error GoTo 0

Sub update(strFile, strOld, strNew)
Dim objFSO, objFile, strText, strNewText
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFile, ForReading)
strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, strOld, strNew)
Set objFile = objFSO.OpenTextFile(strFile, ForWriting)
objFile.WriteLine strNewText
objFile.Close
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...