PDA

Показать полную графическую версию : [решено] вставить в файл, его имя


talmachka
01-10-2015, 12:57
Парни, Хэлп!)

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

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

Foreigner
01-10-2015, 14:27
Батник не слишком хорош для обработки текста. Два варианта:

@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
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
talmachka, Для повершелл один раз выполните от администратора:

set-executionpolicy remotesigned

во втором варианте отработав странички стали пустыми.
Там необходим sed (http://gnuwin32.sourceforge.net/packages/sed.htm)

talmachka
02-10-2015, 10:29
Foreigner, спасибо Вам, а можно попросить Вас доработать первый вариант, так как с шелом и sed не особо знакома.

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

129649

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

Через шелл тоже не получается, изменила политику безопасности по Вашей рекомендации, но в файлах ничего не поменялось после запуска команды.
PS C:\Users\User> D:\list\new\jpg.ps1
PS C:\Users\User>

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

talmachka
02-10-2015, 13:46
Foreigner, скачать (http://rusfolder.com/44292717). В каждой html-ке, есть ' ####!.jpg ' нужно чтоб батник смог заменить ' ####!.jpg ' ---- ' имя_файла.jpg ' , только очень важно чтоб он это делал в каждом файле, который нах-ся в папке, так как таких файлов будет много. Большое Спасибо.

Foreigner
02-10-2015, 14:48
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
Foreigner, Спасибо, через shell отработало! Подскажите плиз, батник просто запускаю? или как-то особенно нужно, просто также стер он все в html файлах и все:( sed установил отсюда http://sourceforge.net/projects/gnuwin32/files/sed/4.2.1/sed-4.2.1-setup.exe/download?use_mirror=kent нужно ли перезагружать комп?

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

sed

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

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

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

talmachka
03-10-2015, 07:03
Foreigner, Спасибо Вам большое, Вы мне очень помогли.




© OSzone.net 2001-2012