Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Изменение метода поиска строк в конфиге

Ответить
Настройки темы
CMD/BAT - Изменение метода поиска строк в конфиге
Stalker_AleX333


Сообщения: n/a

Профиль | Цитировать


Как бы мне вот это:
Код: Выделить весь код
set "ControlPanelFilesListConfig=Silver Raven mods pack data\fileslist.cfg"
set "ControlPanelFilesListMissingFiles="

:: Чтение конфиг-файла fileslist.cfg
setlocal EnableDelayedExpansion
for /f "tokens=1,2* delims==" %%A in ("%ControlPanelFilesListConfig%") do set "$%%A=%%B"

:: Проверка наличия всех файлов для панели управления в Silver Raven mods pack data
for %%? in (%$ControlPanelFilesListConfig%) do (
if not exist "%%~?" set ControlPanelFilesListMissingFiles=!ControlPanelFilesListMissingFiles!, "%%~?"
)
setlocal DisableDelayedExpansion

if defined ControlPanelFilesListMissingFiles (
 color fc
 echo.
 echo *ОШИБКА! Следующие файлы, необходимые для корректной работы программы, не найдены:
 echo.
 echo.
 for %%A in (%ControlPanelFilesListMissingFiles%) do echo %%~A
 echo.
 echo.
 pause
 exit
)
научить читать файл конфига:
1. в столбик
2. по такому шаблону

Код: Выделить весь код
[ControlPanelFilesList]
Silver Raven mods pack data\Additional options\Alternate Start\Alternate Start - Live Another Life.esp
Silver Raven mods pack data\Additional options\Alternate Start\Alternate Start - Live Another Life.bsa
Silver Raven mods pack data\Additional options\Serana\Cured\00002b6c.nif
Silver Raven mods pack data\Additional options\Serana\Vampire\00002b6c.nif
и т.д. и т.п.

[ДругойПараметр]
бла-бла-бла

Отправлено: 20:37, 03-07-2019

 

Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Stalker_AleX333, лучше отказаться от идеи использовать для разборка конфигурационных файлов командные сценарии в пользу PowerShell и WinAPI.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:23, 04-07-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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

Stalker_AleX333


Сообщения: n/a

Профиль | Цитировать


greg zakharov, знаю, знаю. Уже даже тестовый черновик есть.
Скрытый текст
Код: Выделить весь код
$scriptName = $MyInvocation.MyCommand.Name
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
$exeName = "SkyrimSE.exe"
$processName = $exeName.Substring(0, $exeName.LastIndexOf(".exe"))
$modFolderName = "Silver Raven mods pack data"
$listfileName = "fileslist.cfg"
$soundconfigName = "hd_sounds_packages.cfg"
$autoupconfigName = "autoupdate.cfg"

$profileEnv = $ENV:UserProfile
$maininiName = "$profileEnv\Documents\My Games\Skyrim Special Edition"
$pluginsName = "$profileEnv\AppData\Local\Skyrim Special Edition"

#FUNCTIONS

#delete mod files
function deleteFiles ($path) {
	#remove mod folder
	if(Test-Path -LiteralPath "$path\$modFolderName") {
		Remove-Item -LiteralPath "$path\$modFolderName" -Force -Recurse
	}
	#remove script
	if(Test-Path -LiteralPath "$path\run.ps1") {
		Remove-Item -LiteralPath "$path\run.ps1" -Force
	}
}

#show information about current version and statuses
function printCurrentVersion () {
	#read sound config file
	$snd_searchParams = "HDSoundsPackagesStatus", "HDSoundsPackagesLocalizationStatus"
	$configFile = "$scriptPath\$modFolderName\$soundconfigName"
	$lines = Get-Content $configFile
	if(!$lines.Length) {
		Write-Host "File is empty: $configFile"
		return
	}
	#get lines from config file
	foreach($line in $lines) {
		foreach ($element in $snd_searchParams) {
			$res = $line -match $element
			if($res -eq $true) {
				Write-Host ($line -replace "="," ")
				break
			}
		}
	}
	
	#read auto config file
	$auto_searchParam = "ModsPackVersion"
	$configFile = "$scriptPath\$modFolderName\$autoupconfigName"
	$lines = Get-Content $configFile
	if(!$lines.Length) {
		Write-Host "File is empty: $configFile"
		return
	}
	foreach($line in $lines) {
		$res = $line -match $auto_searchParam
		if($res -eq $true) {
			Write-Host ($line -replace "="," ")
			break
		}
	}
	
	Write-Host "ENBVersion Нет данных"
}

#final actions for localization settings
function finalizeLocalization ($modIniFile, $appIniFile, $configFile, $language) {
	#copy ini
	Copy-Item $modIniFile -Destination $appIniFile
	#add language status
	Add-Content $configFile "UpdateInstalled=$language"
	#update install status
	((Get-Content -path $configFile) -replace 'HDSoundsPackagesStatus=Не установлен', 'HDSoundsPackagesStatus=Установлен') | Set-Content -Path $configFile
}

#process localization
function checkLocalization ($configFile) {
	$k_HDSoundsPackagesStatus = "HDSoundsPackagesStatus"
	$k_HDSoundsPackagesENGLocalization = "HDSoundsPackagesENGLocalization"
	$k_HDSoundsPackagesRUSLocalization = "HDSoundsPackagesRUSLocalization"
	$k_HDSoundsPackagesENGRUSLocalization = "HDSoundsPackagesENGRUSLocalization"
	$k_HDSoundsPackagesLocalizationStatus = "HDSoundsPackagesLocalizationStatus"

	#read sound file
	$lines = Get-Content $configFile
	if(!$lines.Length) {
		Write-Host "File is empty: $configFile"
		return
	}

	#get lines from config file
	$soundParams = @{}
	foreach($line in $lines) {
		#get values
		$pos = $line.IndexOf("=")
		if($pos -eq -1) {
			continue
		}
		$k = $line.Substring(0, $pos)
		$v = $line.Substring(($pos + 1), ($line.Length - $pos - 1))
		$soundParams.$k = $v
	}

	if($soundParams.$k_HDSoundsPackagesStatus -eq "Не установлен") {
		Write-Host "Sound packages not installed"
		
		#check that both ru and eng files exist
		$filesOK = $true
		$files = $soundParams.$k_HDSoundsPackagesENGRUSLocalization.Split(",")
		foreach($file in $files) {
			$file = $file.trim(" ")
			if(!(Test-Path -LiteralPath "$scriptPath\$file")) {
				Write-Host "Sound file: $scriptPath\$file not exist"
				$filesOK = $false
				break
			}
		}
		
		if($filesOK -eq $true) {
			#do something
			Write-Host "All sound packages existed"
			$soundParams.Clear()
			
			#select sound package
			Write-Host -NoNewLine 'Select sound package(1 - eng, 2 - rus)[1]:'
			$answer = $Host.UI.RawUI.ReadKey()
			$key = $answer.Character
			$iniFilename = ""
			$language = ""
			switch($key) {
				"1" {
					Write-Host "`nEnglish selected"
					$iniFilename = "$scriptPath\$modFolderName\INI settings\Skyrim_eng.ini"
					$language = "Английский"
					break
				}
				"2" {
					Write-Host "`nRussian selected"
					$iniFilename = "$scriptPath\$modFolderName\INI settings\Skyrim_rus.ini"
					$language = "Русский"
					break
				}
				default {
					Write-Host "`nEnglish selected (default)"
					$iniFilename = "$scriptPath\$modFolderName\INI settings\Skyrim_eng.ini"
					$language = "Английский"
					break
				}
			}
			finalizeLocalization $iniFilename "$maininiName\Skyrim.ini" $configFile $language
			return
		}
		
		#check that eng files exist
		$filesOK = false
		$files = $soundParams.$k_HDSoundsPackagesENGLocalization.Split(",")
		foreach($file in $files) {
			$file = $file.trim(" ")
			if(!(Test-Path -LiteralPath "$scriptPath\$file")) {
				Write-Host "Sound file: $scriptPath\$file not exist"
				$filesOK = $false
				break
			}
		}
		
		if($filesOK -eq $true) {
			#do something
			Write-Host "Eng sound packages existed"
			$soundParams.Clear()
			finalizeLocalization $iniFilename "$maininiName\Skyrim.ini" $configFile $language
			return
		}
		
		#check that rus files exist
		$filesOK = false
		$files = $soundParams.$k_HDSoundsPackagesRUSLocalization.Split(",")
		foreach($file in $files) {
			$file = $file.trim(" ")
			if(!(Test-Path -LiteralPath "$scriptPath\$file")) {
				Write-Host "Sound file: $scriptPath\$file not exist"
				$filesOK = $false
				break
			}
		}
		
		if($filesOK -eq $true) {
			Write-Host "Rus sound packages existed"
			$soundParams.Clear()
			finalizeLocalization $iniFilename "$maininiName\Skyrim.ini" $configFile $language
			return
		}
		
		Write-Host "No language selected"
	}
	
	Write-Host "Sound packages alredy installed"
}

#process autoconfig
function checkAutoupdate ($configFile) {
	$k_UpdateInstalled = "UpdateInstalled"
	$k_ModsPackVersion = "ModsPackVersion"
	$k_AutoUpdateFoldersForDelete = "AutoUpdateFoldersForDelete"
	$k_AutoUpdateFilesForDelete = "AutoUpdateFilesForDelete"
	$k_AutoUpdateRenameFoldersAndFiles = "AutoUpdateRenameFoldersAndFiles"
	$k_AutoUpdateMoveFoldersAndFiles = "AutoUpdateMoveFoldersAndFiles"

	#read config file
	$lines = Get-Content $configFile
	if(!$lines.Length) {
		Write-Host "File is empty: $configFile"
		return
	}

	#get lines from config file
	$autoupParams = @{}
	foreach($line in $lines) {
		#skip rem lines
		$pos = $line.IndexOf(";")
		if($pos -ne -1) {
			continue
		}
		#get values
		$pos = $line.IndexOf("=")
		if($pos -eq -1) {
			continue
		}
		$k = $line.Substring(0, $pos)
		$v = $line.Substring(($pos + 1), ($line.Length - $pos - 1))
		$autoupParams.$k = $v
	}
	
	if($autoupParams.$k_UpdateInstalled -eq $null) {
		Write-Host "Corrupted config file: UpdateInstalled parameter no found"
		return
	}
	if($autoupParams.$k_ModsPackVersion -eq $null) {
		Write-Host "Corrupted config file: ModsPackVersion parameter no found"
		return
	}
	
	if($autoupParams.$k_AutoUpdateFoldersForDelete -ne $null) {
		Write-Host "process AutoUpdateFoldersForDelete"
		#do something
	}
	if($autoupParams.$k_AutoUpdateFilesForDelete -ne $null) {
		Write-Host "process AutoUpdateFilesForDelete"
		#do something
	}
	if($autoupParams.$k_AutoUpdateRenameFoldersAndFiles -ne $null) {
		Write-Host "process AutoUpdateRenameFoldersAndFiles"
		#do something
	}
	if($autoupParams.$k_AutoUpdateFoldersForDelete -ne $null) {
		Write-Host "process AutoUpdateMoveFoldersAndFiles"
		#do something
	}
	
	#set status in config
	((Get-Content -path $configFile) -replace 'UpdateInstalled=false', 'UpdateInstalled=true') | Set-Content -Path $configFile
}

#process plugins and settings
function copyPluginsAndSettings () {
	$prefsName = "$maininiName\SkyrimPrefs.ini"
	$pluginsSrcName = "$scriptPath\$modFolderName\Plugins list\Plugins.txt"
	$refSettings = @{}
	$refSettings.bDrawLandShadows = "1"
	$refSettings.bFXAAEnabled = "0"
	$refSettings.bEnableImprovedSnow = "0"
	$refSettings.bShadowsOnGrass = "1"
	$refSettings.fTreesMidLODSwitchDist = "12288.0000"
	$refSettings.fMeshLODLevel2FadeTreeDistance = "6144.0000"
	$refSettings.fMeshLODLevel1FadeTreeDistance = "8192.0000"
	$refSettings.fSkyCellRefFadeDistance = "295000.0000"
	$refSettings.iWaterReflectHeight = "1024"
	$refSettings.iWaterReflectWidth = "1024"
	$refSettings.uiMaxSkinnedTreesToRender = "200"
	
	#check that perf file exist
	if(!(Test-Path -LiteralPath $prefsName)) {
		Write-Host "Config file not found: $prefsName"
		return
	}
	else {
		#read perf file
		$content = Get-Content $prefsName
		if(!$content.Length) {
			Write-Host "File is empty: $prefsName"
			return
		}
		
		#replace values in config
		foreach($line in $content) {
			foreach ($h in $refSettings.GetEnumerator()) {
				$key = $h.Name
				$replaceString = $h.Name + "=" + $h.Value
				$res = $line -match $key
				if($res -eq $true) {
					$content = $content.replace($line, $replaceString)
					break
				}
			}
		}
		$content | Set-Content $prefsName
	}
	
	#if plugins file exist process it
	if(Test-Path -LiteralPath $pluginsSrcName) {
		Write-Host "Plugins file found. Copy it"
		Copy-Item $pluginsSrcName -Destination "$pluginsName"
	}
}

#MENUS

function menuLocalizationAndMusic () {
	Write-Host -NoNewLine 'Select action (1 - Download localization, 2 - Select localization)[2]:'
	$answer = $Host.UI.RawUI.ReadKey()
	$key = $answer.Character
	switch($key) {
		"1" {
			Write-Host "`nDownload localization selected"
			#code not ready
			break
		}
		"2" {
			Write-Host "`nSelect localization selected"
			break
		}
		default {
			Write-Host "`nSelect localization selected (default)"
			break
		}
	}
}

function menuLocalizationActication () {
	Write-Host -NoNewLine 'Select sound package (1 - eng, 2 - rus, 0 - back)[0]:'
	$answer = $Host.UI.RawUI.ReadKey()
	$key = $answer.Character
	switch($key) {
		"1" {
			Write-Host "`nEnglish selected"
			#some code
			break
		}
		"2" {
			Write-Host "`nRussia selected"
			#some code
			break
		}
		"0" {
			menuLocalizationAndMusic
		}
		default {
			menuLocalizationAndMusic
		}
	}
}

function menuSelectUpdateSource () {
	Write-Host -NoNewLine 'Select download source (1 - Gamer-Mods.ru, 2 - ЯндексДиск, 3 - GoogleDrive, 0 - back)[0]:'
	$answer = $Host.UI.RawUI.ReadKey()
	$key = $answer.Character
	switch($key) {
		"1" {
			Write-Host "`nGamer-Mods.ru selected"
			start https://gamer-mods.ru/load/skyrim_se/grafika/silver_raven_mods_pack/152-1-0-5368
			break
		}
		"2" {
			Write-Host "`nЯндексДиск selected"
			start https://yadi.sk/d/qyJbvZs43Mb3fR
			break
		}
		"3" {
			Write-Host "`nGoogleDrive selected"
			start https://drive.google.com/drive/folders/0B8H6Ge9z3EyEN3l5QWJpQXJuSmc?usp=sharing
			#some code
			break
		}
		default {
			#back
			break
		}
	}
}

function menuMain () {
	Write-Host -NoNewLine 'Select download source (1 - copy plugins, 2 - hd packages, 3 - update, 4 - loot, 5 - info, 6 - delete, 0 - exit)[0]:'
	$answer = $Host.UI.RawUI.ReadKey()
	$key = $answer.Character
	switch($key) {
		"1" {
			Write-Host "`nCopy plugins selected"
			break
		}
		"2" {
			Write-Host "`nHD packages selected"
			break
		}
		"3" {
			Write-Host "`nUpdate selected"
			break
		}
		"4" {
			Write-Host "`nLoot selected"
			break
		}
		"5" {
			Write-Host "`nInfo selected"
			break
		}
		"6" {
			Write-Host "`nDelete selected"
			break
		}
		default {
			return
		}
	}
}

#MAIN BODY

#check that exe file in same folder
if(!(Test-Path -LiteralPath "$scriptPath\$exeName")) {
   Write-Host "Executable file not found: $scriptPath\$exeName"
   return
}

#check that game is not running
$processActive = Get-Process $processName -ErrorAction SilentlyContinue
if($processActive -ne $null) {
	Write-Host "Process is active: $processName"
	return
}

#check mod folder with list file exist
if(!(Test-Path -LiteralPath "$scriptPath\$modFolderName\$listfileName")) {
	Write-Host "Mod folder not found: $scriptPath\$modFolderName\$listfileName"
	return
}

#check that list file not empty
$lines = Get-Content "$scriptPath\$modFolderName\$listfileName";
if(!$lines.Length) {
	Write-Host "File is empty: $scriptPath\$modFolderName\$listfileName";
	return
}

#check that each file exist
foreach($line in $lines) {
	if(!(Test-Path -LiteralPath "$scriptPath\$line")) {
		Write-Host "File not found: $scriptPath\$line"
		return
	}
}

#test success!
#checkLocalization "$scriptPath\$modFolderName\$soundconfigName"
#test success!
#checkAutoupdate "$scriptPath\$modFolderName\$autoupconfigName"
#test success!
#copyPluginsAndSettings
#test success!
#printCurrentVersion
#test success!
#deleteFiles "E:\temp3\CMD1"

Write-Host "End!"

Но работающий как надо вариант нужен был еще вчера...

Отправлено: 21:40, 04-07-2019 | #3


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Stalker_AleX333, у вас .cfg файл по структуре похож на .ini, а потому проще, повторюсь, использовать WinAPI, конкретней - GetPrivateProfileString и иже с ним.

Отправлено: 20:36, 05-07-2019 | #4

Stalker_AleX333


Сообщения: n/a

Профиль | Цитировать


Не буду плодить однотипные темы, подниму эту.

Вот почему-то перестал работать вот этот кусок. Глаза уже "замылились", может я где-то испоганил?

Код: Выделить весь код
set "ControlPanelFilesListConfig=Silver Raven mods pack data\fileslist.cfg"
set "ControlPanelFilesListMissingFiles="

:: Чтение конфиг-файла fileslist.cfg
setlocal EnableDelayedExpansion
for /f "tokens=1,2* delims==" %%A in ("%ControlPanelFilesListConfig%") do set "$%%A=%%B"

:: Проверка наличия всех файлов для панели управления в Silver Raven mods pack data
for %%? in (%$ControlPanelFilesListConfig%) do (
if not exist "%%~?" set ControlPanelFilesListMissingFiles=!ControlPanelFilesListMissingFiles!, "%%~?"
)
setlocal DisableDelayedExpansion

if defined ControlPanelFilesListMissingFiles (
color fc
 echo.
 echo.
 echo.
 echo *ОШИБКА! Следующие файлы, необходимые для корректной работы программы, не найдены:
 echo.
 echo.
 for %%A in (%ControlPanelFilesListMissingFiles%) do echo %%~A
 echo.
 echo.
 echo Извлеките папку Silver Raven mods pack data из установочных архивов со сборкой в папку игры вручную и перезапустите панель управления. Убедитесь, что антивирусное ПО не блокирует ее работу.
 echo.
 echo.
pause
exit
)
fileslist.cfg

Код: Выделить весь код
ControlPanelFilesList="Silver Raven mods pack data\Additional options\Alternate Start\Alternate Start - Live Another Life.esp" "Silver Raven mods pack data\Additional options\Alternate Start\Alternate Start - Live Another Life.bsa" "Silver Raven mods pack data\Additional options\Serana\Cured\00002b6c.nif" и т.д.


З.Ы. Если что, это чудо должно сверять наличие файлов со списком в конфиге и в случае отсутствия чего-либо ругаться, выводя в столбик список отсутствующего.

Отправлено: 22:19, 13-07-2019 | #5

Stalker_AleX333


Сообщения: n/a

Профиль | Цитировать


Для справки. В общем, дошел до этого:

Код: Выделить весь код
call :read_control_panel_files_list_config "%ControlPanelFilesListConfig%"

:: Проверка наличия всех файлов для панели управления в Silver Raven mods pack data
setlocal EnableDelayedExpansion
for %%? in (!$ControlPanelFilesList!) do ( 
    if "" == "!!" endlocal 
    if not exist "%%?" ( 
      set File=%%? 
      setlocal EnableDelayedExpansion 
      for /f "delims=" %%A in ("!ControlPanelFilesListMissingFiles!, !File!") do ( 
        endlocal 
        set ControlPanelFilesListMissingFiles=%%A 
      ) 
    ) 
)

if defined %ControlPanelFilesListMissingFiles% (
color fc
 echo.
 echo.
 echo.
 echo *ОШИБКА! Нижеуказанные файлы, необходимые для корректной работы программы, не найдены:
 echo.
 echo.

for /f "usebackq tokens=1* delims==" %%A  in ("%ControlPanelFilesListConfig%") do (
    for %%? in (%%B) do if not exist %%? set ControlPanelFilesListMissingFiles=1 && echo %%~?
 
 echo.
 echo.
 echo.
 echo *ОШИБКА! Вышеуказанные файлы, необходимые для корректной работы программы, не найдены.
 echo.
 echo Извлеките папку Silver Raven mods pack data из установочных архивов со сборкой в папку игры вручную и перезапустите панель управления. Убедитесь, что антивирусное ПО не блокирует ее работу.
 echo.
 echo.
pause
exit
)
Только, эта штука валится при наличии всех указанных в списке файлов. Еще пришлось спрашивать на других форумах, как нормально обойти игнор спец. символа (в данном случае ! ), встречающегося в именах некоторых файлов.

Отправлено: 18:08, 20-07-2019 | #6


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Stalker_AleX333, Плохо, что приведён код (надо его изучать, чтобы понять смысл задачи), легче - когда поставлена задача.
Пытаюсь сформулировать: есть текстовый файл, например,
Silver Raven mods pack data\fileslist.cfg,
в котором, среди прочего, содержится список файлов в виде определённого параметра
Код: Выделить весь код
ControlPanelFilesList="Silver Raven mods pack data\Additional options\Alternate Start\Alternate Start - Live Another Life.esp" "Silver Raven mods pack data\Additional options\Alternate Start\Alternate Start - Live Another Life.bsa" "Silver Raven mods pack data\Additional options\Serana\Cured\00002b6c.nif" и т.д.
Надо проанализировать наличие перечисленных файлов, выдать список отсутствующих, при отсутствии хоть одного файла - завершить работу. При наличии всех файлов - продолжить исполнение следующего кода.
Вот вариант
Код: Выделить весь код
@Echo Off
cls
	Set "CFG=Silver Raven mods pack data\fileslist.cfg"
	Set "FileList=ControlPanelFilesList="

	If  Not Exist "%CFG%" (Echo !!! File "%CFG%" not found  &Pause &Exit /B 2)

	Set /A N=100
	Set /A Log=0

	FOR /F "usebackq tokens=1* delims==" %%i IN (`FINDSTR /I "%FileList%" "%CFG%"`) DO (
		Set /A Log=1
		FOR %%f IN (%%j) DO If Not Exist %%f (
			Set /A N+=1 
			Call Set "@@@%%N%%=%%f"
		)
	)
	If %Log%==0 (Echo !!! Parameter "%FileList%" not found in "%CFG%" &Pause &Exit /B 2)

	If Not %N%==100 (
		Echo !!! Files not found
		FOR /F "usebackq tokens=1* delims==" %%i IN (`Set "@@@"`) DO Echo %%j
		Pause
		Exit /B 2
	)

	Echo Здесь пишем остальной код 
pause
Exit /B
Восклицаний не боится! Чтобы не было проблем с "!", надо суметь обойтись без setlocal EnableDelayedExpansion
Если надо искать наличие файлов, перечисленных в разных параметрах, лучше это оформить в виде процедуры
Код: Выделить весь код
@Echo Off
cls
	Set "CFG=Silver Raven mods pack data\fileslist.cfg"

	Set /A N=100
	Call :NoFiles "%CFG%" "ControlPanelFilesList=" ||Exit /B 2
	Call :NoFiles "%CFG%" "TraLaLaFilesList=" ||Exit /B 2

	If Not %N%==100 (
		Echo !!! Files not found
		FOR /F "usebackq tokens=1* delims==" %%i IN (`Set "@@@"`) DO Echo %%j
		Pause
		Exit /B 2
	)

	Echo Здесь пишем остальной код 
pause
Exit /B

:NoFiles
	If  Not Exist %1 (Echo !!! File %1 not found  &Pause &Exit /B 2)

	Set /A Log=0
	FOR /F "usebackq tokens=1* delims==" %%i IN (`FINDSTR /I %2 %1`) DO (
		Set /A Log=1
		FOR %%f IN (%%j) DO If Not Exist %%f (
			Set /A N+=1 
			Call Set "@@@%%N%%=%%f"
		)
	)
	If %Log%==0 (Echo !!! Parameter %2 not found in %1 &Pause &Exit /B 2)
Exit /B 0
Цитата Stalker_AleX333:
научить читать файл конфига:
1. в столбик
2. по такому шаблону »
Вот так, но как это связано с поиском отсутствующих файлов?
Код: Выделить весь код
@Echo Off
cls
	Set "CFG=Silver Raven mods pack data\fileslist.cfg"
	Set "Out=Silver Raven mods pack data\fileslist.cfg2"

	If  Not Exist "%CFG%" (Echo !!! File "%CFG%" not found  &Pause &Exit /B 2)

	>"%Out%" (FOR /F "usebackq tokens=1* delims==" %%i IN (`2^>nul More "%CFG%"`) DO (
		Echo [%%i]
		If Not "%%j"=="" FOR %%f IN (%%j) DO Echo %%~f
		Echo.
	))
pause
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 22-07-2019 в 11:43.


Отправлено: 15:42, 21-07-2019 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Изменение метода поиска строк в конфиге

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Изменение строк в файле Nikugorsk Скриптовые языки администрирования Windows 13 08-06-2018 18:32
VBS/WSH/JS - помогите написать на javascript код для поиска и фильтрации в тхт файле строк. spiritmen Скриптовые языки администрирования Windows 0 06-02-2015 23:42
Java - [решено] Вызов метода вне метода -_- GordonG Программирование и базы данных 2 04-04-2014 18:42
Теория - Какой алгоритм поиска максимальной общей подстроки выбрать для коротких строк? seriych Программирование и базы данных 4 01-04-2014 20:27
Разное - Изменение shell-а поиска Putin-mode Оформление Windows XP 3 18-02-2009 15:36




 
Переход