Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 7

Автор: slech
Дата сообщения: 17.11.2009 12:26
подскажите как перемещать из папки в папку файлы по 200 штук скажем.
Есть папка In в неё прибывают файлы.
Есть папка Out в неё нужно раз в час перемещать по 200 файлов из In
Как перемещать файлы из папки в определённом количестве.
Файлы однотипные - *.txt

Спасибо.
Автор: 01MDM
Дата сообщения: 17.11.2009 13:31
slech
Попробуй такой вариант:

Код:
@echo off
setlocal

pushd "C:\In"

for /f "tokens=*" %%i in ('dir /b *.txt') do call:set "%%i"
for /l %%i in (1,1,200) do (
    for /f "tokens=2 delims==" %%i in ('set %%i_') do move "%%i" "C:\Out"
)
popd
goto:eof

:set
set /a cnt+=1
set "%cnt%_=%~1"
Автор: slech
Дата сообщения: 17.11.2009 14:03
01MDM
спасибо большое.
1 скрипт сработал.
2 тоже но только 1 раз, мне нужно копировать постояно. т.е. 200, потом через час ещё 200 и т.д.
видимо надо добавить ещё какую нибудь проверку.

Добавлено:
зато второй работает намного быстрее.
можно его подправить ?
Автор: Maqentaer
Дата сообщения: 17.11.2009 14:14
slech
планировщик задач тебе в помощь для периодического запуска.
Автор: slech
Дата сообщения: 17.11.2009 14:21
Maqentaer
дело же не в планировщике.
скрипт запускается.

Цитата:

@echo off
setlocal

pushd "C:\In"

for /f "skip=200 tokens=*" %%i in ('dir /b *.txt') do (
set "file=%%i" 2>nul
goto:move
)

:move
if not defined file goto:end

for /f "tokens=*" %%i in ('dir /b *.txt') do (
if not "%%i"=="%file%" (move "%%i" "C:\Out") else (goto:end)
)

:end
popd

и не выполняет перемещение.
как обеспечить периодичность это уже я придумаю.

Добавлено:
а, нет стоп.
скрипт 2 не срабатывает если файлов в папке In остаётся меньше 200.
осталось 8 файлов - скрипт и не выполняет перемещение.
Автор: wolf0425
Дата сообщения: 17.11.2009 14:50
slech
Цитата:
подскажите как перемещать из папки в папку файлы по 200 штук скажем.
Есть папка In в неё прибывают файлы.
Есть папка Out в неё нужно раз в час перемещать по 200 файлов из In
простое премещение до 200 файлов:

Код: @echo off
setlocal enabledelayedexpansion
set counter=0
for %%a in ( in\* ) do set /a counter += 1 & if !counter! LEQ 200 (move "%%a" "out\%%~nxa") else exit
Автор: slech
Дата сообщения: 17.11.2009 16:20
wolf0425
спасибо, работает.
Автор: dSasha
Дата сообщения: 17.11.2009 16:22

Цитата:
Sasha так пойдет?
Код: type 1.txt | findstr /b Location: | sed -r "s/^.+&ct=([0-9]+).+&so=([0-9][0-9],[0-9][0-9])&.+$/\1 \2/g"
только оно на вышеописанный порядок завязано, защиты от дурака нет.
Автор: Drowisha
Дата сообщения: 17.11.2009 17:21
Никогда не интересовался батниками, да и не думал что они понадобяться.
Поставили задачу сделать, батник что-бы бекапил несколько серверов, причем бекап делал полный а не пару файликов. Причем на одном из серверов стоит AIX.
Посидел подумал вот что получилось, но это чудище не работает, гляньте профи взглядом, и укажите нубу на ошибки. Спасибо.
C:
cd C:\test\BackUp\TNF\
date /t
SET dir=backup

wget -r -nH -P %dir%/TNF/RIS ftp://user:passwd@172.18.69.68

wget -r -nH -P %dir%/TNF/DGW ftp://user:passwd@172.18.69.68

wget -r -nH -P %dir%/TNF/RES ftp://user:passwd@172.18.69.69

wget -r -nH -P %dir%/TNF/ASC ftp://user:passwd@172.18.69.70

wget -r -nH -P %dir%/TNF/TTS1 ftp://user:passwd@172.18.69.71

wget -r -nH -P %dir%/TNF/TTS2 ftp://user:passwd@172.18.69.72

net use \\172.18.69.73\c$ passwd /user:domain\user
md %dir%\TNF\172.18.69.73
Xcopy /E /Y /EXCLUDE:dnt_copy.txt \\172.18.69.73\c$\Medio\*.* %dir%\TNF\RTS\172.18.69.73\

net use \\172.18.69.74\c$ passdw /user:
md %dir%\TNF\RD\172.18.69.74\
Xcopy /E /Y /EXCLUDE:dnt_copy_RD.txt "\\172.18.69.74\c$\*.*" %dir%\RD\172.18.69.74\

rem MDP
md C:\test\BackUP\TNF\MDP
C:\test\BackUP\WinSCP3\winscp3 /console /script=C:\test\BackUP\WinSCP3\scripts.txt

rem ToZIP

cd C:\test\BackUP\TNF
C:\"Program Files"\7-Zip\7z.exe a -tzip SCP1.zip TNF
rmdir /s /q C:\test\BackUP\TNF
mkdir C:\test\BackUP\TNF    
xcopy /E /Y C:\test\BackIP\TNF\*.zip
C:\test\BackUP\TNF
DATEDIR.exe C:\test\BackUP\backup\
Автор: Ortios
Дата сообщения: 17.11.2009 19:08
dSasha
С позволения wolf0425 предложу чуть более универсальный вариант, который к тому же учитывает отрицательные числа:

Код: type 1.txt | findstr /b Location: | sed -r "s/^.*&ct=([0-9]*).*&so=(-?[,0-9]*).+$/\1 \2/g">_1.txt
Автор: wolf0425
Дата сообщения: 17.11.2009 21:17

Цитата:
чуть более универсальный вариант, который к тому же учитывает отрицательные числа:
ну если пошла такая пьянка что самостоятельно подогнать регэксп под строку владеющий awk заказчик почему-то не может, то отмечу что дома у него еще и разделители по другому настронены:
Цитата:
so=-10.55&cp=0&sc=1&z=22&de=
так что наверно получится
sed -r "s/^.*&ct=([0-9]+).*&so=(-?[\.,0-9]+).*$/\1 \2/g"

вот кто бы научил как прямо на скрипте sed прибить тут лишние строки, чтоб от findstr избавиться... чисто из эстетско-хулиганских мотиваций.
Автор: VisioNRU
Дата сообщения: 17.11.2009 21:24
В шапке темы ссылка на "Пакет утилит для организации интерфейса в bat-файлах" не работает.
печально.. а так хотелось бы
Автор: dSasha
Дата сообщения: 17.11.2009 21:32
wolf0425
Ortios
Большое Спасибо!
Мне снова здесь помогли!
Теперь обрабатывает идеально.
Только когда система не срабатывает и баланса не выдаёт, выходит вся строчка.
Но это уже мелочь.
Автор: Ortios
Дата сообщения: 17.11.2009 22:21
wolf0425, dSasha

Цитата:
вот кто бы научил как прямо на скрипте sed прибить тут лишние строки, чтоб от findstr избавиться... чисто из эстетско-хулиганских мотиваций.


Код: sed -rn "s/^Location.*&ct=([0-9]*).*&so=(-?[,\.0-9]*).+$/\1 \2/gp" 1.txt>_1.txt
Автор: wolf0425
Дата сообщения: 17.11.2009 23:15
Ortios, спасибо, я и подозревал что это как-то просто делается.
А type ты зря сократил - файла у заказчика нет, сразу с выхода curl шло

блин, когда же я проникнусь тем как на седе писать. я не про регэкспы, а как раз про команды. Почитать бы чего... простое, что-ли.
Автор: dSasha
Дата сообщения: 17.11.2009 23:52
А я эти строки колхозным способом прибил.
Код: | find "&so" |
Автор: wolf0425
Дата сообщения: 18.11.2009 00:36

Цитата:
А я эти строки колхозным способом прибил.
ну прибил и прибил, я больше для себя спрашивал - задача то типовая.
Автор: BVV63
Дата сообщения: 18.11.2009 06:38
Привет всем. Подскажите, плиз, решение такой задачи.
Имеется переменная произвольного содержания (длина содержания тоже произвольная). Известно лишь, что первый символ - пробел (за ним - смысловой символ). Можно ли как-то преобразовать переменную так, чтобы этот пробел удалился?

Добавлено:
Убрать нужно только первый пробел, а не все имеющиеся.
Автор: 01MDM
Дата сообщения: 18.11.2009 07:26
BVV63

Код:
set "var= qwerty"
set "var=%var:~1%"
Автор: BVV63
Дата сообщения: 18.11.2009 08:34
Ещё вопрос. Это не жизненно важно, чисто для эстэтики . Можно ли как-нибудь из под SetLocal EnableDelayedExpansion вывести через Echo знак восклицания? Я попробовал и ^!, но безрезультатно.

Добавлено:
И ещё, можно ли производить арифметические операции с разименованными переменными?
Set /A Var=!Var!+1 почему-то не прокатывает.
Автор: NIKZZZZ
Дата сообщения: 18.11.2009 09:18
BVV63

Цитата:
Echo знак восклицания?


Цитата:
Set /A Var=!Var!+1 почему-то не прокатывает.


Код: set var=0
set xx=!
SetLocal EnableDelayedExpansion
Set /A var=var+1
echo !var!
echo !xx!
Автор: king_stiven
Дата сообщения: 18.11.2009 09:18
BVV63

Цитата:
Set /a Var+=1

Автор: mugil_cephalus
Дата сообщения: 18.11.2009 09:35
я не понимаю, почему nesting не работает

Код: SetLocal EnableDelayedExpansion
cmd /c "setlocal disabledelayedexpansion && echo hi! && exit"
Автор: 01MDM
Дата сообщения: 18.11.2009 09:47
mugil_cephalus

Код:
cmd /?
cmd /v:off
Автор: mugil_cephalus
Дата сообщения: 18.11.2009 10:15
01MDM
stanek:
Автор: BVV63
Дата сообщения: 18.11.2009 10:24
NIKZZZZ
king_stiven
Со знаком восклицания разобрался, спасибо. С арифметикой тоже, но тут возникла новая проблема. Я и забыл совсем, что из под SetLocal переменные не вытащить так просто. Не знает ли кто фокусов, как их значения можно вытащить, не записывая в файлы и не пользуясь SetX?
Автор: 01MDM
Дата сообщения: 18.11.2009 10:33
BVV63
Пример:

Код:
@echo off

setlocal

set a=1
set b=2

endlocal & (

echo %a%
echo %b%
set a1=%a%
set b1=%b%

)

echo %a%
echo %b%

echo %a1%
echo %b1%
Автор: mugil_cephalus
Дата сообщения: 18.11.2009 10:44
01MDM

Цитата:
только

понятно

Добавлено:
SetLocal EnableDelayedExpansion
cmd /c /v:off "echo hi! && exit"

W:\>1

W:\>SetLocal EnableDelayedExpansion

W:\>cmd /c /v:off "echo hi! && exit"
Синтаксическая ошибка в имени файла, имени папки или метке тома.

W:\>

??

Добавлено:

01MDM
я хотел сделать сначала как NIKZZZZ

Цитата:

set xx=!
SetLocal EnableDelayedExpansion
echo !xx!

а потом подумал через nesting
Автор: 01MDM
Дата сообщения: 18.11.2009 11:14
mugil_cephalus

Цитата:
W:\>cmd /c /v:off "echo hi! && exit"


Код:
setlocal enabledelayedexpansion
cmd /c "echo hi^!"
Автор: mugil_cephalus
Дата сообщения: 18.11.2009 11:46
01MDM

Цитата:
Цитата:W:\>cmd /c /v:off "echo hi! && exit"


Код:
setlocal enabledelayedexpansion
cmd /c "echo hi^!"


спасибо ,
вот идиотская ошибка
попробовал сначала escape-символом - как BVV63
Цитата:
попробовал и ^!,
, а позже - в nesting'e забыл


Добавлено:
BVV63
вот еще вариант, созданный с помощью 01MDM


Код: SetLocal EnableDelayedExpansion
cmd /v:off /c "echo hi^!"
echo comebackTest!

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.