<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=10061</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=10061&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Сложный вопрос. Поиск файлов и изменение строк».]]></description>
		<lastBuildDate>Sun, 19 Oct 2014 02:24:32 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=87521#p87521</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Dr.Jekyll)]]></author>
			<pubDate>Sun, 19 Oct 2014 02:24:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=87521#p87521</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=87520#p87520</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Dr.Jekyll)]]></author>
			<pubDate>Sun, 19 Oct 2014 01:10:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=87520#p87520</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=87499#p87499</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Sat, 18 Oct 2014 20:34:51 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=87499#p87499</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=87496#p87496</link>
			<description><![CDATA[<p>Ничего не понимаю .... Можно как-то наглядно?</p>]]></description>
			<author><![CDATA[null@example.com (Dr.Jekyll)]]></author>
			<pubDate>Sat, 18 Oct 2014 20:12:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=87496#p87496</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=87494#p87494</link>
			<description><![CDATA[<p>Содержимое прочитанных строк записываем в переменную. Если в строке содержится путь AAAA, заменяем его на XXXX и также дописываем изменённую строку в переменную. Когда файл закончился, при условии, что хотя бы раз были внесены поправки, следует старый файл удалить командой <em>FileDelete</em> и записать вместо него новый одноимённый файл командой <em>FileAppend</em>.</p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Sat, 18 Oct 2014 19:52:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=87494#p87494</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=87492#p87492</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Dr.Jekyll)]]></author>
			<pubDate>Sat, 18 Oct 2014 19:37:53 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=87492#p87492</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=87490#p87490</link>
			<description><![CDATA[<p>То есть алгоритм такой: находим среди файлов *.cfg тот, что содержит слово kernel. Из него извлекаем путь AAAA. Затем прочёсываем все файлы *.cfg и изменяем все найденные пути AAAA на XXXX. Так?</p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Sat, 18 Oct 2014 19:19:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=87490#p87490</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=87488#p87488</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Dr.Jekyll)]]></author>
			<pubDate>Sat, 18 Oct 2014 19:00:20 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=87488#p87488</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=87487#p87487</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Sat, 18 Oct 2014 18:24:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=87487#p87487</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=87486#p87486</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Dr.Jekyll)]]></author>
			<pubDate>Sat, 18 Oct 2014 18:06:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=87486#p87486</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=87484#p87484</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Sat, 18 Oct 2014 17:14:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=87484#p87484</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=87480#p87480</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Dr.Jekyll)]]></author>
			<pubDate>Sat, 18 Oct 2014 12:18:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=87480#p87480</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=87476#p87476</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Sat, 18 Oct 2014 06:48:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=87476#p87476</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Сложный вопрос. Поиск файлов и изменение строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=87473#p87473</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Dr.Jekyll)]]></author>
			<pubDate>Sat, 18 Oct 2014 04:33:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=87473#p87473</guid>
		</item>
	</channel>
</rss>
