Очень полезная функция, отсутствующая в библиотеке инструментов командной строки 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 в качестве механизма, используемого независимо от обработчика по умолчанию. Вы определенно захотите проверить это, прежде чем полагаться на эту функциональность.