Компьютерный форум 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=294167)

luda-chel 20-01-2015 08:13 2458663

Применить ко всем файлам каталога.
 
Добрый день! подскажите решение вот такого вопроса:
Есть каталог например С:\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, но и для остальных файлов в папке?

Iska 20-01-2015 08:26 2458664

Цитата:

Цитата 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")
        }


luda-chel 20-01-2015 08:49 2458668

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

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

Iska 20-01-2015 10:29 2458700

Цитата:

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

Не только.

Цитата:

Цитата luda-chel
А мне с моего рабочего компьютера нужно. (про PowerShell почитала, ниразу не пользовалась) »

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

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

Цитата:

Цитата luda-chel
А вот если через bat? как? »

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

Georgio 20-01-2015 11:50 2458749

Цитата:

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


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



Код:

@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


luda-chel 20-01-2015 13:41 2458799

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

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

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

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

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

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

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

Iska 20-01-2015 16:45 2458904

Цитата:

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

Теоретически сие вполне возможно.

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


Время: 20:01.

Время: 20:01.
© OSzone.net 2001-