Использование имени файла для правки в теле файла.
Доброго дня, проблема следующая:
Есть конфигурационные файлы - user1.cfg , user2.cfg , user3.cfg .. и т.п.
Внутри файлов есть ссылка на папку профайла, соответственно в user1.cfg - 'c:\path\user1'.
Иногда эта ссылка не совпадает и в user1.cfg может оказаться 'c:\path\user3'.
Как заставить сверять имя файла со строкой в конфиге,и в случае отличия подставлять нужное имя, из имени файла?
|
Цитата:
Цитата xkafkax
Как заставить сверять имя файла со строкой в конфиге »
|
Зависит от кодировки файла, от вида строки со «ссылкой на папку профайла».
Цитата:
Цитата xkafkax
и в случае отличия подставлять нужное имя, из имени файла? »
|
Ответ будет тот же, что и выше.
Упакуйте образец конфигурационного файла в архив и выложите сюда, либо на RGhost.
|
xkafkax, то есть мы должны заменить последний элемент пути в параметрах «OutputFilesDirectory»/«TmpFilesDirectory» на базовое имя конфигурационного файла, так?
На WSH:
читать дальше »
Код:
Option Explicit
Dim strConfigFileName
Dim objFSO
Dim strContent
If WScript.Arguments.Count = 1 Then
strConfigFileName = WScript.Arguments.Item(0)
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strConfigFileName) Then
With objFSO.OpenTextFile(strConfigFileName)
strContent = StrConvert(.ReadAll(), "windows-1251", "cp866")
.Close
End With
With WScript.CreateObject("VBScript.RegExp")
.IgnoreCase = True
.Global = True
.MultiLine = True
.Pattern = "^( *)(OutputFilesDirectory|TmpFilesDirectory)(=.+\\)(.+)(\\\r)$"
If .Test(strContent) Then
strContent = .Replace(strContent, "$1$2$3" & objFSO.GetBaseName(strConfigFileName) & "$5")
End If
End With
With objFSO.CreateTextFile(strConfigFileName)
.Write StrConvert(strContent, "cp866", "windows-1251")
.Close
End With
Else
WScript.Echo "Config file [" & strConfigFileName & "] not found."
End If
Set objFSO = Nothing
Else
WScript.Echo "Usage: wscript.exe " & WScript.ScriptName & " <Config file>"
End If
WScript.Quit 0
'=============================================================================
'=============================================================================
' HKEY_CLASSES_ROOT\MIME\Database\Charset
' cp866, windows-1251, koi8-r, unicode, utf-8, _autodetect
'=============================================================================
Function StrConvert(ByVal strText, ByVal strSourceCharset, ByVal strDestCharset)
Const adTypeText = 2
Const adModeReadWrite = 3
With WScript.CreateObject("ADODB.Stream")
.Type = adTypeText
.Mode = adModeReadWrite
.Open
.Charset = strSourceCharset
.WriteText strText
.Position = 0
.Charset = strDestCharset
StrConvert = .ReadText
.Close
End With
End Function
'=============================================================================
Можете просто перетаскивать файл конфигурации на скрипт.
|
Там проблема в том, что этих файлов не один и не два..
UPD: Спасибо, щас разберусь со скриптом. просто сделаю батник,чтоб перебирал все конфиг файлы и травил на них скрипт.
|
Цитата:
Цитата xkafkax
Там проблема в том, что этих файлов не один и не два.. »
|
Сколько? Известны их имена/пути?
|
Код:
#Powershell script.
#Don't forget unlock script executing by
#using command "Set-ExecutionPolicy RemoteSigned" or "Set-ExecutionPolicy Unrestricted"
#Save this file with ".ps1" extension
function ConvertTo-Encoding ([string]$From, [string]$To) {
Begin {
$encFrom=[System.Text.Encoding]::GetEncoding($from)
$encTo=[System.Text.Encoding]::GetEncoding($to)
}
Process {
$bytes=$encTo.GetBytes($_)
$bytes=[System.Text.Encoding]::Convert($encFrom,$encTo,$bytes)
$encTo.GetString($bytes)
}
}
$FileList=Get-ChildItem -Path "с:\*" -Include "*.cfg" -Recurse
foreach($el in $FileList) {
$outFile=""
$str=""
$CurFile=Get-Content $el | ConvertTo-Encoding cp866 windows-1251
$CurFile | % {
if (($_ | Select-String -Pattern "OutputFilesDirectory","TmpFilesDirectory" -AllMatches) -eq $null) {
$str=$_+"`n"
} elseif ($_.ToString().SubString($_.ToString().Length-6,5) -ne $el.Name) {
$str=$_.ToString().SubString(0,$_.ToString().Length-6)+$el.Name.TrimEnd(".cfg")+"\`n"
} else {
$str=$_+"`n"
}
$outFile+=$str
}
if ($CurFile -eq $outFile) {
"файлы равны"
Continue
}
if (Test-Path -Path $el) {
Remove-Item -Path $el -Force
}
$file=New-Object System.IO.StreamWriter((New-Object System.IO.FileStream($el,[IO.FileMode]::OpenOrCreate)),[Text.Encoding]::GetEncoding("cp866"))
$file.Write($outFile)
$file.Close()
}
Ковыряет диск C:, проверяет все конфиги и перезаписывает
|
Цитата:
Цитата sunnykey
Ковыряет диск C:, проверяет все конфиги и перезаписывает »
|
И Вам скажу: не делайте так.
|
Цитата Iska:
И Вам скажу: не делайте так. »
Само собой;) Я же уверен, что TS конфиги хранит в отдельной папке, а не в корне системного диска
|
Время: 02:31.
© OSzone.net 2001-