Windows

Заменить текст в простых текстовых файлах из командной строки

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

  • Обновите файлы конфигурации / INI, чтобы заменить пути UNC.
  • Массовое обновление пользовательской информации, хранящейся в INI-файлах на сервере Terminal / Citrix.
  • Используйте вместе со сценариями для развертывания «шаблонных» данных, а затем применяйте значения к скопированным файлам.

Нашим решением является VBScript, который взаимодействует с функцией замены Visual Basic. Поместив этот сценарий в папку в переменной Windows PATH, вы получите доступ к этой функции.

Пользы

Оказавшись в вашей системе, вы можете вызвать скрипт, просто используя команду ReplaceText. Несколько примеров иллюстрируют способы, которыми вы можете использовать это:

Замените слово «ноль» на «н / д» в файле C: DataValues.csv:

ReplaceText «C: DataValues.csv» null н / д

Сканируйте все INI-файлы в папке C: Users (+ подкаталоги), заменяя все вхождения «Server = Old» на «Server = New», используя поиск без учета регистра:

FORFILES / P «C: Пользователи» / M * .ini / S / C «Cmd / C ReplaceText @path Server = Старый сервер = Новый / I»

Сканируйте все файлы CFG в профиле текущего пользователя, заменив «p @ ssw0rd» на «PA $$ woRd», используя поиск с учетом регистра:

FORFILES / P «% UserProfile%» / M * .cfg / S / C «Cmd / C ReplaceText @path p @ ssw0rd PA $$ woRd»

Как вы можете видеть ниже, скрипт очень прост и может быть легко изменен, чтобы соответствовать любым особым ситуациям, которые у вас могут возникнуть. В качестве альтернативы вам может потребоваться создать копии скрипта, которые жестко закодируют определенные значения, чтобы вы могли выполнить команду двойным щелчком мыши и / или позволить вам легко распространять ее среди других.

Сценарий

'Replace Text
'Written by: Jason Faulkner
'SysadminGeek.com 'This script should be placed in a folder specified in your system's PATH variable. 'Usage (WScript):
'ReplaceText FileName OldText NewText [/I] ' /I (optional) - Text matching is not case sensitive Set oArgs = WScript.Arguments intCaseSensitive = 0
For i = 3 to oArgs.Count-1
If UCase(oArgs(i)) = "/I" Then intCaseSensitive = 1
Next Set oFSO = CreateObject("Scripting.FileSystemObject") If Not oFSO.FileExists(oArgs(0)) Then
WScript.Echo "Specified file does not exist."
Else
Set oFile = oFSO.OpenTextFile(oArgs(0), 1)
strText = oFile.ReadAll
oFile.Close strText = Replace(strText, oArgs(1), oArgs(2), 1, -1, intCaseSensitive) Set oFile = oFSO.OpenTextFile(oArgs(0), 2)
oFile.WriteLine strText
oFile.Close
End If

'Replace Text
'Written by: Jason Faulkner
'SysadminGeek.com 'This script should be placed in a folder specified in your system's PATH variable. 'Usage (WScript):
'ReplaceText FileName OldText NewText [/I] ' /I (optional) - Text matching is not case sensitive Set oArgs = WScript.Arguments intCaseSensitive = 0
For i = 3 to oArgs.Count-1
If UCase(oArgs(i)) = "/I" Then intCaseSensitive = 1
Next Set oFSO = CreateObject("Scripting.FileSystemObject") If Not oFSO.FileExists(oArgs(0)) Then
WScript.Echo "Specified file does not exist."
Else
Set oFile = oFSO.OpenTextFile(oArgs(0), 1)
strText = oFile.ReadAll
oFile.Close strText = Replace(strText, oArgs(1), oArgs(2), 1, -1, intCaseSensitive) Set oFile = oFSO.OpenTextFile(oArgs(0), 2)
oFile.WriteLine strText
oFile.Close
End If

'Replace Text
'Written by: Jason Faulkner
'SysadminGeek.com 'This script should be placed in a folder specified in your system's PATH variable. 'Usage (WScript):
'ReplaceText FileName OldText NewText [/I] ' /I (optional) - Text matching is not case sensitive Set oArgs = WScript.Arguments intCaseSensitive = 0
For i = 3 to oArgs.Count-1
If UCase(oArgs(i)) = "/I" Then intCaseSensitive = 1
Next Set oFSO = CreateObject("Scripting.FileSystemObject") If Not oFSO.FileExists(oArgs(0)) Then
WScript.Echo "Specified file does not exist."
Else
Set oFile = oFSO.OpenTextFile(oArgs(0), 1)
strText = oFile.ReadAll
oFile.Close strText = Replace(strText, oArgs(1), oArgs(2), 1, -1, intCaseSensitive) Set oFile = oFSO.OpenTextFile(oArgs(0), 2)
oFile.WriteLine strText
oFile.Close
End If

'Replace Text
'Written by: Jason Faulkner
'SysadminGeek.com 'This script should be placed in a folder specified in your system's PATH variable. 'Usage (WScript):
'ReplaceText FileName OldText NewText [/I] ' /I (optional) - Text matching is not case sensitive Set oArgs = WScript.Arguments intCaseSensitive = 0
For i = 3 to oArgs.Count-1
If UCase(oArgs(i)) = "/I" Then intCaseSensitive = 1
Next Set oFSO = CreateObject("Scripting.FileSystemObject") If Not oFSO.FileExists(oArgs(0)) Then
WScript.Echo "Specified file does not exist."
Else
Set oFile = oFSO.OpenTextFile(oArgs(0), 1)
strText = oFile.ReadAll
oFile.Close strText = Replace(strText, oArgs(1), oArgs(2), 1, -1, intCaseSensitive) Set oFile = oFSO.OpenTextFile(oArgs(0), 2)
oFile.WriteLine strText
oFile.Close
End If

'Replace Text
'Written by: Jason Faulkner
'SysadminGeek.com 'This script should be placed in a folder specified in your system's PATH variable. 'Usage (WScript):
'ReplaceText FileName OldText NewText [/I] ' /I (optional) - Text matching is not case sensitive Set oArgs = WScript.Arguments intCaseSensitive = 0
For i = 3 to oArgs.Count-1
If UCase(oArgs(i)) = "/I" Then intCaseSensitive = 1
Next Set oFSO = CreateObject("Scripting.FileSystemObject") If Not oFSO.FileExists(oArgs(0)) Then
WScript.Echo "Specified file does not exist."
Else
Set oFile = oFSO.OpenTextFile(oArgs(0), 1)
strText = oFile.ReadAll
oFile.Close strText = Replace(strText, oArgs(1), oArgs(2), 1, -1, intCaseSensitive) Set oFile = oFSO.OpenTextFile(oArgs(0), 2)
oFile.WriteLine strText
oFile.Close
End If

'Replace Text
'Written by: Jason Faulkner
'SysadminGeek.com 'This script should be placed in a folder specified in your system's PATH variable. 'Usage (WScript):
'ReplaceText FileName OldText NewText [/I] ' /I (optional) - Text matching is not case sensitive Set oArgs = WScript.Arguments intCaseSensitive = 0
For i = 3 to oArgs.Count-1
If UCase(oArgs(i)) = "/I" Then intCaseSensitive = 1
Next Set oFSO = CreateObject("Scripting.FileSystemObject") If Not oFSO.FileExists(oArgs(0)) Then
WScript.Echo "Specified file does not exist."
Else
Set oFile = oFSO.OpenTextFile(oArgs(0), 1)
strText = oFile.ReadAll
oFile.Close strText = Replace(strText, oArgs(1), oArgs(2), 1, -1, intCaseSensitive) Set oFile = oFSO.OpenTextFile(oArgs(0), 2)
oFile.WriteLine strText
oFile.Close
End If

'Replace Text
'Written by: Jason Faulkner
'SysadminGeek.com 'This script should be placed in a folder specified in your system's PATH variable. 'Usage (WScript):
'ReplaceText FileName OldText NewText [/I] ' /I (optional) - Text matching is not case sensitive Set oArgs = WScript.Arguments intCaseSensitive = 0
For i = 3 to oArgs.Count-1
If UCase(oArgs(i)) = "/I" Then intCaseSensitive = 1
Next Set oFSO = CreateObject("Scripting.FileSystemObject") If Not oFSO.FileExists(oArgs(0)) Then
WScript.Echo "Specified file does not exist."
Else
Set oFile = oFSO.OpenTextFile(oArgs(0), 1)
strText = oFile.ReadAll
oFile.Close strText = Replace(strText, oArgs(1), oArgs(2), 1, -1, intCaseSensitive) Set oFile = oFSO.OpenTextFile(oArgs(0), 2)
oFile.WriteLine strText
oFile.Close
End If

'Replace Text
'Written by: Jason Faulkner
'SysadminGeek.com 'This script should be placed in a folder specified in your system's PATH variable. 'Usage (WScript):
'ReplaceText FileName OldText NewText [/I] ' /I (optional) - Text matching is not case sensitive Set oArgs = WScript.Arguments intCaseSensitive = 0
For i = 3 to oArgs.Count-1
If UCase(oArgs(i)) = "/I" Then intCaseSensitive = 1
Next Set oFSO = CreateObject("Scripting.FileSystemObject") If Not oFSO.FileExists(oArgs(0)) Then
WScript.Echo "Specified file does not exist."
Else
Set oFile = oFSO.OpenTextFile(oArgs(0), 1)
strText = oFile.ReadAll
oFile.Close strText = Replace(strText, oArgs(1), oArgs(2), 1, -1, intCaseSensitive) Set oFile = oFSO.OpenTextFile(oArgs(0), 2)
oFile.WriteLine strText
oFile.Close
End If

'Replace Text
'Written by: Jason Faulkner
'SysadminGeek.com 'This script should be placed in a folder specified in your system's PATH variable. 'Usage (WScript):
'ReplaceText FileName OldText NewText [/I] ' /I (optional) - Text matching is not case sensitive Set oArgs = WScript.Arguments intCaseSensitive = 0
For i = 3 to oArgs.Count-1
If UCase(oArgs(i)) = "/I" Then intCaseSensitive = 1
Next Set oFSO = CreateObject("Scripting.FileSystemObject") If Not oFSO.FileExists(oArgs(0)) Then
WScript.Echo "Specified file does not exist."
Else
Set oFile = oFSO.OpenTextFile(oArgs(0), 1)
strText = oFile.ReadAll
oFile.Close strText = Replace(strText, oArgs(1), oArgs(2), 1, -1, intCaseSensitive) Set oFile = oFSO.OpenTextFile(oArgs(0), 2)
oFile.WriteLine strText
oFile.Close
End If

'Replace Text
'Written by: Jason Faulkner
'SysadminGeek.com 'This script should be placed in a folder specified in your system's PATH variable. 'Usage (WScript):
'ReplaceText FileName OldText NewText [/I] ' /I (optional) - Text matching is not case sensitive Set oArgs = WScript.Arguments intCaseSensitive = 0
For i = 3 to oArgs.Count-1
If UCase(oArgs(i)) = "/I" Then intCaseSensitive = 1
Next Set oFSO = CreateObject("Scripting.FileSystemObject") If Not oFSO.FileExists(oArgs(0)) Then
WScript.Echo "Specified file does not exist."
Else
Set oFile = oFSO.OpenTextFile(oArgs(0), 1)
strText = oFile.ReadAll
oFile.Close strText = Replace(strText, oArgs(1), oArgs(2), 1, -1, intCaseSensitive) Set oFile = oFSO.OpenTextFile(oArgs(0), 2)
oFile.WriteLine strText
oFile.Close
End If

Дополнительные замечания

По умолчанию Windows использует WScript для выполнения файлов VBScript (VBS). Единственная проблема, которую это может вызвать — любые ошибки и / или сообщения из скрипта будут отображаться в виде всплывающих окон. Для инструмента командной строки лучше всего, чтобы эти сообщения отображались в консоли. Есть несколько способов сделать это.

Измените обработчик файлов VBScript по умолчанию на CScript, выполнив эту команду из командной строки (с правами администратора):

CScript // H: CScript

Запустите сценарий ReplaceText явно с помощью команды CScript:

CScript «C: PathToReplaceText.vbs» // B FileName OldText NewText [/ I]

В особом случае выполнение ReplaceText из пакетного сценария обычно подразумевает использование CScript в качестве механизма, используемого независимо от обработчика по умолчанию. Вы определенно захотите проверить это, прежде чем полагаться на эту функциональность.

Скачать сценарий ReplaceText с SysadminGeek.com

Похожие посты
Windows

Драйверы для Windows 10

Windows

Лучшие приложения для фотографии на вашем Windows Phone

Windows

Команды командной строки для панели управления апплетами

Windows

Официальное приложение SmugMug теперь доступно для Windows Phone