<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=10061&amp;type=atom" />
	<updated>2014-10-19T02:24:32Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=10061</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87521#p87521" />
			<content type="html"><![CDATA[<p>Кажется догнал ... вот так работает:</p><div class="codebox"><pre><code>DestDrive := &quot;J:\&quot;

Loop, %DestDrive%\*, 2, 1
If A_LoopFileName = isolinux
    {
    DestDir := A_LoopFileLongPath
    }
LinuxFormPath := SubStr(DestDir, 3, InStr(DestDir, &quot;\isolinux&quot;)-2)
LinuxFormPath := RegExReplace(LinuxFormPath, &quot;\\&quot;, &quot;/&quot;)

Loop, %DestDir%\*.cfg
    {
    ConfigFullPath := A_LoopFileLongPath
    ConfigName := A_LoopFileName
    If ConfigName = isolinux.cfg
        {
        NewConfigFile := DestDir . &quot;\syslinux.cfg&quot;
        }
        
    Loop, read, % ConfigFullPath
        {
        NewPath := RegExReplace(A_LoopReadLine, &quot;/casper&quot;, LinuxFormPath . &quot;casper&quot;)
        NewPath := RegExReplace(NewPath, &quot;cdrom/&quot;, &quot;cdrom&quot; . LinuxFormPath)
        FileAppend,
            (
            % NewPath . &quot;`n&quot;
            ), % NewConfigFile
        }
    }</code></pre></div><p>Может как-то по-другому надо, но работает это! ...</p>]]></content>
			<author>
				<name><![CDATA[Dr.Jekyll]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30028</uri>
			</author>
			<updated>2014-10-19T02:24:32Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87521#p87521</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87520#p87520" />
			<content type="html"><![CDATA[<p>Хыть ап стену убейся, а ничего не получается ...</p><div class="codebox"><pre><code>DestDrive := &quot;J:\&quot;

Loop, %DestDrive%\*, 2, 1
If A_LoopFileName = isolinux
    {
    DestDir := A_LoopFileLongPath
    }
LinuxFormPath := SubStr(DestDir, 3, InStr(DestDir, &quot;\isolinux&quot;)-2)
LinuxFormPath := RegExReplace(LinuxFormPath, &quot;\\&quot;, &quot;/&quot;)

Loop, %DestDir%\*.cfg
    {
    ConfigFullPath := A_LoopFileLongPath
    ConfigName := A_LoopFileName
    If ConfigName = isolinux.cfg
        {
        NewConfigFile := DestDir . &quot;\syslinux.cfg&quot;
        }
        
    Loop, read, % ConfigFullPath
        {
        FileAppend,
            (
            % RegExReplace(A_LoopReadLine, &quot;/casper&quot; , LinuxFormPath . &quot;casper&quot;) . &quot;`n&quot;
            ), % NewConfigFile
        }
    }</code></pre></div><p>Так за один раз все не меняет ... что делать ...</p>]]></content>
			<author>
				<name><![CDATA[Dr.Jekyll]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30028</uri>
			</author>
			<updated>2014-10-19T01:10:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87520#p87520</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87499#p87499" />
			<content type="html"><![CDATA[<p>Допустим, мы уже знаем путь AAAA. Мы уже знаем, как он будет выглядеть в формате XXXX.</p><p>Комадой <em>Loop (файлы и папки)</em> перебираем все файлы *.cfg</p><p>Внутри вышеуказанного цикла командой <em>Loop (чтение файла)</em> перебираем строки. Проверяем командой <em>IfInString</em>: если строка не содержит путь AAAA, то просто помещаем её в переменную. Если строка содержит путь AAAA, то изменяем внутри строки все AAAA на XXXX и добавляем её в ту же переменную. При этом создаём для себя метку, что были сделаны изменения.<br />В конце чтения файла, если были сделаны изменения, то старый файл удаляем, а на его место записываем новый. Содержимое нового файла берём из переменной, в которую &quot;складывали&quot; строки. Если изменений никаких не было, то просто очищаем переменную и переходим к следующему файлу.</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2014-10-18T20:34:51Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87499#p87499</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87496#p87496" />
			<content type="html"><![CDATA[<p>Ничего не понимаю .... Можно как-то наглядно?</p>]]></content>
			<author>
				<name><![CDATA[Dr.Jekyll]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30028</uri>
			</author>
			<updated>2014-10-18T20:12:30Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87496#p87496</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87494#p87494" />
			<content type="html"><![CDATA[<p>Содержимое прочитанных строк записываем в переменную. Если в строке содержится путь AAAA, заменяем его на XXXX и также дописываем изменённую строку в переменную. Когда файл закончился, при условии, что хотя бы раз были внесены поправки, следует старый файл удалить командой <em>FileDelete</em> и записать вместо него новый одноимённый файл командой <em>FileAppend</em>.</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2014-10-18T19:52:30Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87494#p87494</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87492#p87492" />
			<content type="html"><![CDATA[<p>В том-то и дело, что некоторые строки несколько раз содержат путь. К чему привязаться, я не понимаю.</p><p>Вот эта строка:</p><div class="codebox"><pre><code>append  file=/cdrom/XXXX/preseed/custom.seed boot=casper cdrom-detect/try-usb=true noprompt floppy.allowed_drive_mask=0 ignore_uuid live-media-path=/XXXX/casper/ initrd=/XXXX/casper/initrd.gz text splash vga=791--</code></pre></div><p>Посмотрите сколько раз встречается путь (обозначен XXXX, куда надо добавить новый путь) ....</p><p>Стока с &quot;kernel&quot; - это не проблема. Здесь все просто.</p>]]></content>
			<author>
				<name><![CDATA[Dr.Jekyll]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30028</uri>
			</author>
			<updated>2014-10-18T19:37:53Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87492#p87492</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87490#p87490" />
			<content type="html"><![CDATA[<p>То есть алгоритм такой: находим среди файлов *.cfg тот, что содержит слово kernel. Из него извлекаем путь AAAA. Затем прочёсываем все файлы *.cfg и изменяем все найденные пути AAAA на XXXX. Так?</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2014-10-18T19:19:44Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87490#p87490</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87488#p87488" />
			<content type="html"><![CDATA[<p>ОК. В самом первом посте написал примеры строк</p><p>Было:</p><div class="codebox"><pre><code>kernel /casper/vmlinuz
append  file=/cdrom/preseed/custom.seed boot=casper initrd=/casper/initrd.gz text splash vga=791--</code></pre></div><p>Нужно:</p><div class="codebox"><pre><code>kernel /XXXX/casper/vmlinuz
append  file=/cdrom/XXXX/preseed/custom.seed boot=casper cdrom-detect/try-usb=true noprompt floppy.allowed_drive_mask=0 ignore_uuid live-media-path=/XXXX/casper/ initrd=/XXXX/casper/initrd.gz text splash vga=791--</code></pre></div><p>в &quot;нужно&quot; отмечено все нужное XXXX - это новый путь, который надо добавить.<br />Несколько раз в одной строке.<br />Предполагается, что путь заранее не известен. Поэтому идем по такому принципу:</p><div class="codebox"><pre><code>DestDrive := &quot;J:\&quot; ; Диск, где все находится

Loop, %DestDrive%\*, 2, 1 ; Ищем директорию isolinux с рекурсией в субдиректории
If A_LoopFileName = isolinux
    {
    DestDir := A_LoopFileLongPath ; Нашли isolinux
    }
    
Loop, %DestDir%\*.cfg ; Теперь ищем все конфиги *.cfg в директории isolinux
    {
    FileName := A_LoopFileLongPath ; Нашли первый файл конфига
    Loop, read, %FileName%
        {
        А что дальше? ... Это не прокатит:
        IfInString, A_LoopReadLine, casper, MsgBox, %A_LoopReadLine%`n
        }
    }</code></pre></div><br /><p>Замена виндового формата пути вида J:\XXXX\ZZZZ\isolinux на линуксовый вида /XXXX/ZZZZ/ с отрубанием isolinux:</p><div class="codebox"><pre><code>DestDrive := &quot;J:\&quot;

Loop, %DestDrive%\*, 2, 1
If A_LoopFileName = isolinux
    {
    DestDir := A_LoopFileLongPath
    }
LinuxFormat := SubStr(DestDir, 3, InStr(DestDir, &quot;\&quot;)-11)
LinuxFormat := RegExReplace(LinuxFormat, &quot;\\&quot;, &quot;/&quot;)

MsgBox Windows Format: &quot;%DestDir%&quot;`n`nLinux Format: &quot;%LinuxFormat%&quot;</code></pre></div><p>Как добавить ЭТО во все строки во всех файлах конфигах, где XXXX ?</p>]]></content>
			<author>
				<name><![CDATA[Dr.Jekyll]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30028</uri>
			</author>
			<updated>2014-10-18T19:00:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87488#p87488</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87487#p87487" />
			<content type="html"><![CDATA[<p>Ничего не понимаю (c).<br /><span class="postimg"><img src="http://mb-team.ru/download/file.php?avatar=2523_1372364885.jpeg" alt="http://mb-team.ru/download/file.php?avatar=2523_1372364885.jpeg" /></span></p><p>Лучше привести пример типа<br />1) как было <br />2) как стало</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2014-10-18T18:24:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87487#p87487</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87486#p87486" />
			<content type="html"><![CDATA[<p>Кроме того, путь расположения isolinux может быть и таким J:\XXXX\ZZZZ\isolinux<br />Надо из него сделать вида (в формате Linux) /XXXX/ZZZZ/ и добавить в каждую строку, где указан путь ....</p><p>Здесь, это в во всех файлах *.cfg, содержащие подобные строки:</p><div class="codebox"><pre><code>kernel /XXXX/casper/vmlinuz
append  file=/cdrom/XXXX/preseed/custom.seed boot=casper cdrom-detect/try-usb=true noprompt floppy.allowed_drive_mask=0 ignore_uuid live-media-path=/XXXX/casper/ initrd=/XXXX/casper/initrd.gz text splash vga=791--</code></pre></div><p>но в некоторых строках путь может быть указан неоднократно</p>]]></content>
			<author>
				<name><![CDATA[Dr.Jekyll]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30028</uri>
			</author>
			<updated>2014-10-18T18:06:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87486#p87486</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87484#p87484" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Dr.Jekyll пишет:</cite><blockquote><p>Здесь в *.cfg интересуют строки подобного типа:</p><div class="codebox"><pre><code>kernel /casper/vmlinuz
append  file=/cdrom/preseed/custom.seed boot=casper initrd=/casper/initrd.gz text splash vga=791--</code></pre></div><p>В случае распаковки *.iso в какую-либо директорию, получаем isolinux здесь: (например) J:\XXXX\isolinux<br />теперь нужно перекопать все конфиги в J:\XXXX\isolinux\*.cfg в посках подобных строк и изменить в них пути, типа:</p><div class="codebox"><pre><code>kernel /XXXX/casper/vmlinuz
append  file=/cdrom/XXXX/preseed/custom.seed boot=casper cdrom-detect/try-usb=true noprompt floppy.allowed_drive_mask=0 ignore_uuid live-media-path=/XXXX/casper/ initrd=/XXXX/casper/initrd.gz text splash vga=791--</code></pre></div></blockquote></div><p>Никак не догоню: ЗДЕСЬ - это ГДЕ?</p><div class="quotebox"><blockquote><p>в нескольких местах одной строки нужно изменить путь, если он там указан</p></blockquote></div><p>Мне кажется, Ваша задача звучит так:<br /></p><ul><li><p>Определить, содержит ли строка путь к файлу</p></li><li><p>Если содержит, то заменить его на другой, заранее известный путь</p></li></ul><p>Если да, то осталось выяснить, каким образом путь к файлу отличается от прочей информации.</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2014-10-18T17:14:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87484#p87484</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87480#p87480" />
			<content type="html"><![CDATA[<p>Это я знаю. А вот как реализовать все вместе? Основная проблема в том, что в нескольких местах одной строки нужно изменить путь, если он там указан. Вот этот пример:</p><div class="codebox"><pre><code>append  file=/cdrom/XXXX/preseed/custom.seed boot=casper cdrom-detect/try-usb=true noprompt floppy.allowed_drive_mask=0 ignore_uuid live-media-path=/XXXX/casper/ initrd=/XXXX/casper/initrd.gz text splash vga=791--</code></pre></div><div class="codebox"><pre><code>DestDrive := &quot;J:\&quot;

Loop, %DestDrive%\*, 2, 1
If A_LoopFileName = isolinux
    {
    DestDir := A_LoopFileLongPath
    }
    
Loop, %DestDir%\*.cfg
    {
    FileName := A_LoopFileLongPath
    Loop, read, %FileName%
        {
        А что дальше? ... Это не прокатит:
        IfInString, A_LoopReadLine, casper, MsgBox, %A_LoopReadLine%`n
        }
    }</code></pre></div><p>Кроме того, путь расположения isolinux может быть и таким J:\XXXX\ZZZZ\isolinux<br />Надо из него сделать вида /XXXX/ZZZZ/ и добавить в каждую строку, где указан путь ....</p>]]></content>
			<author>
				<name><![CDATA[Dr.Jekyll]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30028</uri>
			</author>
			<updated>2014-10-18T12:18:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87480#p87480</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87476#p87476" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>в основном интересует isolinux.cfg, но есть и другие</p></blockquote></div><p><em>IfExist / IfNotExist</em></p><br /><div class="quotebox"><blockquote><p>нужно перекопать все конфиги в J:\XXXX\isolinux\*.cfg</p></blockquote></div><p><em>Loop (файлы и папки)<br />Loop (чтение файла)<br />FileRead</em></p><br /><div class="quotebox"><blockquote><p>здесь в *.cfg интересуют строки подобного типа</p></blockquote></div><p><em>if var in/contains MatchList<br />IfInString / IfNotInString<br />InStr()<br />RegExMatch()</em></p><br /><div class="quotebox"><blockquote><p>если файл isolinux.cfg, его нужно переименовать в syslinux.cfg</p></blockquote></div><p><em>FileMove</em></p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2014-10-18T06:48:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87476#p87476</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=87473#p87473" />
			<content type="html"><![CDATA[<p>Добрый день всем!<br />Постараюсь объяснить суть вопроса.<br />Имеется какой-либо *.iso с Linux дистрибутивом, где в \root находится директория &quot;isolinux&quot;.<br />Соответственно в isolinux размещаются конфиги типа *.cfg, в основном интересует isolinux.cfg, но есть и другие.</p><p>Здесь в *.cfg интересуют строки подобного типа:</p><div class="codebox"><pre><code>kernel /casper/vmlinuz
append  file=/cdrom/preseed/custom.seed boot=casper initrd=/casper/initrd.gz text splash vga=791--</code></pre></div><p>В случае распаковки *.iso в какую-либо директорию, получаем isolinux здесь: (например) J:\XXXX\isolinux<br />теперь нужно перекопать все конфиги в J:\XXXX\isolinux\*.cfg в посках подобных строк и изменить в них пути, типа:</p><div class="codebox"><pre><code>kernel /XXXX/casper/vmlinuz
append  file=/cdrom/XXXX/preseed/custom.seed boot=casper cdrom-detect/try-usb=true noprompt floppy.allowed_drive_mask=0 ignore_uuid live-media-path=/XXXX/casper/ initrd=/XXXX/casper/initrd.gz text splash vga=791--</code></pre></div><p>Соответственно, если файл isolinux.cfg, его нужно переименовать в syslinux.cfg. Имена остальных конфигов не менять.</p><p>Задача не из простых. Написал уже около 300 строк кода и уперся рогами в этот дуб ...<br />Возможно ли решить этот вопрос средствами AutoHotkey? Или эта задача из категории unreal???</p><p>Заранее благодарю за помощь!</p>]]></content>
			<author>
				<name><![CDATA[Dr.Jekyll]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30028</uri>
			</author>
			<updated>2014-10-18T04:33:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=87473#p87473</id>
		</entry>
</feed>
