Показать полную графическую версию : [решено] вставить в файл, его имя
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
vBulletin v3.6.4, Copyright ©2000-2024, Jelsoft Enterprises Ltd.