Войти

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


Страниц : 1 [2]

Iska
29-10-2016, 09:02
Iska, У меня, конечно, FAR старый ... »
Какой (с точностью до полной версии)? Я ни в одном с таким не сталкивался.

megaloman
29-10-2016, 09:11
Iska, Вот скриншот

megaloman
29-10-2016, 09:44
Iska, Скачал Far30b4774.x86.20160902, действительно там %~0 выдаёт путь\имя.расширение, не так, как если бы батник выполнялся в командном окне. Я привык к тому, что из под фара и в командном окне батники работают одинаково. Отвыкать? :cry:

Iska
29-10-2016, 10:00
Iska, Вот скриншот »
Да, действительно старый, скоро пятнадцать лет версии будет.

Под имеющейся 1.70 beta 5 всегда показывает полный путь. Под чуть более ранним 1.70 beta 4 — полный, либо короткий, зависит от того, вызываем мы его просто по имени (например, Enter на имени пакетного файла), или с полным путём (например, Ctrl-F, Enter). Кстати, аналогичное поведение будет и при вызове пакетного файла из-под обычной командной строки.

Полагаю, где-то в промежутке между beta 4 и beta 5 перекроили Executor, и он стал всегда пытаться использовать полный путь. Слева — beta 4, справа — beta 5:
http://i.imgur.com/7qaJ1QJ.png http://i.imgur.com/MdTZ1wM.png
Деталей в changelog не нашёл.

не так, как если бы батник выполнялся в командном окне. »
Нет-нет. В командной строке будет всё ровно так же — в зависимости от того, указан было просто имя, или же полный путь:
http://i.imgur.com/MSlPKSd.png
А вот с beta 5 поведение Far Manager'а при запуске стало отличаться от командной строки.

Iska
29-10-2016, 10:16
Я привык к тому, что из под фара и в командном окне батники работают одинаково. Отвыкать? »
В Вашей версии (beta 4) они как раз-таки и работают одинаково. А с beta 5 поведение привели в соответствие с Проводником — использовать ассоциацию, как следствие — полный путь.

55kadi
29-10-2016, 15:10
Папка C:\LOGO\new\launch\968000000000 не существует. Сверьте имя реальной папки и имя, прописанное в батнике. »

ДА работает была ошибка в имени папки

СПАСИБО

а можно усложнить задание

в папке 968000000000 есть подпапки например 1111 2222 3333 4444 5555 в некоторых подпапках есть свои подпапки 0000 1234......

можно сделать так стоб эти 3 фаила копировались в подпапки 1111 2222 5555 ..........а если в подпапках есть свои подпапки то только в подпапки подпапок 0000 1234 5432 .....................

968000000000\
1111
2222
3333\ 0000
1234
5555
4444\0000
5432

заранее спасибо

megaloman
29-10-2016, 17:44
55kadi, @Echo Off

Set "InBox=C:\LOGO\555"
Set "InFile="1.cfg" "2.so" "3.bin""

Set "OutBox=C:\LOGO\new\launch\968000000000"
Set "OutBox2=0000"

Set "Log=0"
Set "Lfile=%InBox%\%~nx0.LOG"

If %Log%==1 Dir "%OutBox%" /A:D >"%Lfile%"
If %Log%==1 Dir "%InBox%\?.*" /A:-D >>"%Lfile%"

FOR /F "usebackq delims=" %%d IN (`Dir "%OutBox%" /B /A:D 2^>nul`) DO (
If %Log%==1 Echo ----- "%OutBox%\%%d\" >>"%Lfile%"
FOR %%f IN (%InFile%) DO (
If %Log%==1 Echo Copy "%InBox%\%%~f" "%OutBox%\%%d\" >>"%Lfile%"
Copy "%InBox%\%%~f" "%OutBox%\%%d\" >nul
If Exist "%OutBox%\%%d\%OutBox2%\" (
If %Log%==1 Echo Copy "%InBox%\%%~f" "%OutBox%\%%d\%OutBox2%\" >>"%Lfile%"
Copy "%InBox%\%%~f" "%OutBox%\%%d\%OutBox2%\" >nul
)
)
)

55kadi
29-10-2016, 18:31
а можно усложнить задание »

мы не поняли друг друга

в папке 968000000000\есть подпапки 100 штук с разными именами например 123\ 454\.......в некоторых подпапках 123\454.... ест свои подпапки например 006\001......

и мне надо стоб эти 3 фаила копировались в подпапки 123\454......если в них нет подпапок а если в них есть еще подпапки 006\001 то вних

имена подпапок сейчас как пример реально другие названия

55kadi
29-10-2016, 19:28
C:\LOGO\new\launch\968000000000\
1****\
2****\
3****\
4** \5****\
7****\
5****\
............
1***,2****...... это папки и этих папок около 100 штук

и эти 3 фаила надо копироват с заменой в эти папки

а если в этих папках есть подпапки то в них 5****,7****

55kadi
29-10-2016, 19:54
на прикрепленом фаиле стрелками я показал куда копировать

только имена папок их около 100 у меня другие 5**********,4**** ........... ето пример

megaloman
29-10-2016, 22:01
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion

Set "InBox=C:\LOGO\555"
Set "InFile="1.cfg" "2.so" "3.bin""

Set "OutBox=C:\LOGO\new\launch\968000000000"

FOR /F "usebackq delims=" %%d IN (`Dir "%OutBox%" /B /A:D 2^>nul`) DO (
Set "LDir=0"
FOR /F "usebackq delims=" %%p IN (`Dir "%OutBox%\%%d\" /B /A:D 2^>nul`) DO (
Set "LDir=1"
Call :Proc "%OutBox%\%%d\%%p\"
)
If !LDir!==0 Call :Proc "%OutBox%\%%d\"
)
GoTo :Eof

:Proc
FOR %%f IN (%InFile%) DO (
Copy "%InBox%\%%~f" %1 >nul
)
GoTo :Eof

55kadi
29-10-2016, 22:55
спасибо работает




© OSzone.net 2001-2012