Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] вставить в файл, его имя (http://forum.oszone.net/showthread.php?t=306118)

talmachka 01-10-2015 12:57 2559683

вставить в файл, его имя
 
Парни, Хэлп!)

Задача такая, есть папка, в ней список файлов, в каждом файле есть ' #####! ' (например), нужно батник, который запускался бы в этой папке, проходился по всем файлам что в ней находятся, и заменял ' #####! ' на ' имя файла' ПыСы: только без расширения, т.е. если файл Вася.txt, чтоб вставлялось Вася.

ломаю голову уже несколько дней, ну не въеду никак)

Foreigner 01-10-2015 14:27 2559706

Батник не слишком хорош для обработки текста. Два варианта:
Код:

@echo off
setlocal

:: 1-й вариант
for %%i in (*.txt) do (

    for /f "tokens=*" %%j in ('type %%i') do (
   
    1>>"%%~ni.tmp" (if "%%j"=="####!" (echo %%~ni) else (echo %%j))
        move  "%%~ni.tmp" "%%i"
   
))

:: 2-й вариант
for %%i in (*.txt) do (

    1>"%%~ni.tmp" sed "s/####!/%%~ni/" %%i
    move "%%~ni.tmp" "%%i"

)

Вариант на Powershell:
Код:

foreach ($f in (get-item *.txt)) { (get-content $f) -replace '####!',$f.basename | set-content $f }

talmachka 02-10-2015 08:46 2559906

Foreigner, спасибо, но не выходит что-то


в первом варианте, он заменяет все содержимое html странички, оставив только </html>, и создает несколько ИМЯ.tmp файлов пустых, во втором варианте отработав странички стали пустыми.

P.S. везде поменял (*.txt) на (*.html) так как именно в html страничках мне нужно наз-ие файла.

В Шелл выдает :

Код:

Не удается загрузить файл D:\list\new\jpg.ps1, так как выполнение скриптов запрещено для данной системы. Введите "get-h
elp about_signing" для получения дополнительных сведений.
строка:1 знак:20
+ D:\list\new\jpg.ps1 <<<<
    + CategoryInfo          : NotSpecified: (:) [], PSSecurityException
    + FullyQualifiedErrorId : RuntimeException

Былоб удобнее конечно если можно решить задачу с помощью bat файла.

Foreigner 02-10-2015 10:15 2559922

talmachka, Для повершелл один раз выполните от администратора:
Код:

set-executionpolicy remotesigned
Цитата:

во втором варианте отработав странички стали пустыми.
Там необходим sed

talmachka 02-10-2015 10:29 2559931

Foreigner, спасибо Вам, а можно попросить Вас доработать первый вариант, так как с шелом и sed не особо знакома.

Sed установила, но также пустые файлы после запуска батника(

Файл 129649

прикрепила архив, здесь сами файлы и батник ver1

Через шелл тоже не получается, изменила политику безопасности по Вашей рекомендации, но в файлах ничего не поменялось после запуска команды.
Код:

PS C:\Users\User> D:\list\new\jpg.ps1
PS C:\Users\User>


Foreigner 02-10-2015 13:36 2559998

talmachka, Скиньте архив куда-нибудь на обменник. Здесь его взять не получается. И напишите, что надо заменить на название файла.

talmachka 02-10-2015 13:46 2560004

Foreigner, скачать. В каждой html-ке, есть ' ####!.jpg ' нужно чтоб батник смог заменить ' ####!.jpg ' ---- ' имя_файла.jpg ' , только очень важно чтоб он это делал в каждом файле, который нах-ся в папке, так как таких файлов будет много. Большое Спасибо.

Foreigner 02-10-2015 14:48 2560031

talmachka, Попробовал.. Все работает. Батник (с помощью sed):
Код:

@echo off
setlocal

for %%i in (*.html) do (

        1>%%~ni.tmp sed "s/####!/%%~ni/" "%%i"
        move "%%~ni.tmp" "%%i"       

)

Скрипт powershell:
Код:

foreach ($file in (get-item *.html)) {

        (get-content $file) -replace '####!',$file.basename | set-content $file

}

По батнику просто щелкнуть на выполнение, скрипт powershell сохраните с расширением .ps1, потом открываете powershell.exe (Win+R, powershell, Enter), потом в открывшейся консоли переходите в папку с файлами и выполняете скрипт:
Код:

pushd 'C:\users\talmachka\desktop\new'
.\название_скрипта

подразумевается, что скрипты в папке с файлами html

talmachka 02-10-2015 15:00 2560035

Foreigner, Спасибо, через shell отработало! Подскажите плиз, батник просто запускаю? или как-то особенно нужно, просто также стер он все в html файлах и все:( sed установил отсюда http://sourceforge.net/projects/gnuw...se_mirror=kent нужно ли перезагружать комп?

Foreigner 02-10-2015 15:19 2560043

talmachka, Вам надо проверить попала ли папка, где sed.exe в переменную %PATH%. Для этого в cmd просто выполните:
Код:

sed
Если есть ошибка:
Код:

"sed" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

то необходимо прописать путь к нему в самом батнике или добавить каталог, в котором он находится в %path% (свойства системы > переменные среды)

talmachka 03-10-2015 07:03 2560204

Foreigner, Спасибо Вам большое, Вы мне очень помогли.


Время: 07:52.

Время: 07:52.
© OSzone.net 2001-