Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Применить ко всем файлам каталога.

Ответить
Настройки темы
CMD/BAT - Применить ко всем файлам каталога.

Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день! подскажите решение вот такого вопроса:
Есть каталог например С:\DB\Post
В нем файлы. Нужно в каждм файле заменить 800 на 080.

написала для одногор файла:
@ECHO OFF
setlocal enabledelayedexpansion
SET ifile=1.txt
SET tfile=%ifile%.tmp
SET find=800
SET replace=080
IF EXIST %tfile% DEL /Q %tfile%

FOR /F "tokens=* delims=, " %%a IN (%ifile%) DO (
set line=%%a
set LINE=!LINE:%find%=%replace%!
echo !line!>> %tfile%
)
MOVE /Y %tfile% %ifile%
EXIT /B 0

Как изменить код, чтобы применялось не только для файла 1.txt, но и для остальных файлов в папке?

Отправлено: 08:13, 20-01-2015

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата luda-chel:
Нужно в каждм файле заменить 800 на 080. »
Пакетные файлы не особенно приспособлены для замены содержимого. Возьмите лучше PowerShell или, хотя бы, WSH.

Наподобие:
Код: Выделить весь код
Get-ChildItem -Path "E:\Песочница\0425\*.*" |`
    Where-Object -FilterScript {-not $_.PSIsContainer} |`
        ForEach-Object -Process {
            Set-Content -Path $_.FullName -Value ((Get-Content -Path $_.FullName) -replace "800", "080")
        }
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:26, 20-01-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо за ответ.
Но ведь PowerShell для сервера. А мне с моего рабочего компьютера нужно. (про PowerShell почитала, ниразу не пользовалась)

А вот если через bat? как?

Отправлено: 08:49, 20-01-2015 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата luda-chel:
Но ведь PowerShell для сервера. »
Не только.

Цитата luda-chel:
А мне с моего рабочего компьютера нужно. (про PowerShell почитала, ниразу не пользовалась) »
Поскольку, Вы не заполнили конфигурацию компьютера в своём профиле — можно только гадать. Если только на Вашем рабочем компьютере не установлена ОС Windows 2000 и ниже — PowerShell Вам доступен. С Vista и выше — в комплекте поставки, для Windows XP — в виде отдельной установки.

Сохраните приведённый код в файл с расширением «.ps1», заменив выделенное на Ваши данные. Однократно разрешите в PowerShell исполнение неподписанных скриптов (если не сделали этого ранее). Затем можете пробовать исполнять (лучше сделать копию каталога Ваших файлов и пробовать именно на копии).

Цитата luda-chel:
А вот если через bat? как? »
Коллеги, которым подобное ещё не окончательно надоело , придут, напишут.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:29, 20-01-2015 | #4


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата Iska:
Коллеги, которым подобное ещё не окончательно надоело , придут, напишут. »

Не надоело: каждый день открытия.



Код: Выделить весь код
@echo off

set "dir=C:\DB\Post"
set find=800
set replace=080

pushd "%dir%"
for /f "delims=" %%A in ('"2>nul dir/a-d/b"') do call:sub "%%A"
popd& exit/b 0

:sub
 setlocal enabledelayedexpansion
 for /f "tokens=* delims=, " %%a in ('type %1^& del %1') do ( 
  set line=%%a
  >>%1 echo(!line:%find%=%replace%!
  )
 endlocal& goto:eof
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:50, 20-01-2015 | #5


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, да. я уже почитала поглубже. поняла про PowerShell.

Georgio, попробую сейчас ваше предложение.

Мне тут на работе расскрыли полностью проблему. Оказывается:
1. Файлы переносятся из одной папки (1) во временную (Temp)
2. в них меняется информация
3. Переносятсяв другую папку (2)

Получается в папке 1 их больше нет. Но сервер каждые 1 минуту выкладывает в папку 1 новые файлы.

Если сделать цикл, и постоянно будет происходить перемещение, не получится ли так, что bat файл начнет перемещать файлик которые ещё не скопировался в 1 папку. имею ввиду совместный доступ к файлу.
Размер у них разный, названия то же, поэтому критерий выбрать никак нельзя.

Можно ли с помощью bat сделать ещё проверку занят ли файл каким то процессом (в нашем случае, перенос с сервера в папку 1) ?

вот как то так...

Отправлено: 13:41, 20-01-2015 | #6


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата luda-chel:
не получится ли так, что bat файл начнет перемещать файлик которые ещё не скопировался в 1 папку. имею ввиду совместный доступ к файлу. »
Теоретически сие вполне возможно.

По-хорошему, нужно добавлять в то же задание/приложение, которое осуществляет выкладку файла, добавить вызов скрипта/пакетного файла для замены содержимого этого одного файла.

Отправлено: 16:45, 20-01-2015 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Применить ко всем файлам каталога.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Как применить настройки вида папок ко всем папкам alexa___ Microsoft Windows Vista 8 22-12-2021 18:11
CMD/BAT - Добавить символ ко всем файлам в папке csusha Скриптовые языки администрирования Windows 5 17-09-2010 17:17
Интерфейс - Почему в "Параметрах папки" кнопка "Применить ко всем папкам" неактивна? edixxx Microsoft Windows 7 2 19-05-2009 17:50
Доступ - Нет доступа ко всем файлам и каталогам с определённым именем zussul Microsoft Windows 2000/XP 1 30-08-2007 19:11




 
Переход