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

APST 27-04-2018 09:24 2811004

Копирование группы файлов с условием
 
Добрый день!

Помогите пожалуйста решить следующую задачу: В папке "Папка 1" лежат файлы с именами "Аимя файла" и "имя файла". Необходимо группу файлов с префиксом "А" в начале имени скопировать в "Папка2" и затем у этой группы префикс удалить и уже полученные файлы скопировать в "Папка3"

Данный скрипт копирует файлы с префиксом А во вторую папку и удаляет там первый символ имени, а затем копирует в Папку 3. Не пойму, как сделать проверку на удаление из имени именно "А". И как из Папки 2 копировать в Папку 3 только те файлы у которых этот префикс был удален

Код:

@echo off

setlocal

set "folder=b:\Папка1\"
set "folder_vr=b:\Папка2\"
set "folder_source=b:\Папка3\"
set "number=1"

pushd "%folder%"
Copy "A*.enc" "%folder_vr%"
popd

pushd "%folder_vr%"
for /f "delims=" %%i in ('2^>nul dir/a-d/b') do (
 set name=%%~ni
 2>nul cmd/v/c ren "%%i" "!name:~%number%!%%~xi"

)
popd


pushd "%folder_vr%"
Copy "*.enc" "%folder_source%"

popd

endlocal


Помогите пожалуйста!

megaloman 27-04-2018 11:10 2811018

APST, а зачем столько папок? Почему бы сразу не копировать Аимяфайла из папки1 в имяфайла папки2 ?
Цитата:

Цитата киндзадза
Скрипач не нужен

Или Вы лукавите: надо не копировать фвйлы, а перемещать? Но все равно, можно делать это на раз, не используя промежуточные папки.

APST 27-04-2018 11:36 2811021

Цитата:

Цитата megaloman
Или Вы лукавите: надо не копировать фвйлы, а перемещать? Но все равно, можно делать это на раз, не используя промежуточные папки. »

Нет, не лукавлю, надо именно копировать
Цитата:

Цитата megaloman
APST, а зачем столько папок? Почему бы сразу не копировать Аимяфайла из папки1 в имяфайла папки2 ? »

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

alpap 27-04-2018 13:56 2811037

Цитата:

Цитата APST
не подскажите как? »

megaloman имел ввиду примерно следующее:
Код:

@echo off
set "D1=Папка 1"
set "D2=Папка 3"
set "pref=А"

if not exist "%D2%" md "%D2%"
for /f "delims=" %%a in ('2^>nul dir /a-d/b "%D1%\%pref%*"') do set "nf=%%a"& call :cp "%D1%\%%a" "%D2%" "%%nf:~1%%"
pause& exit

:cp
 >nul copy "%~1" "%~2\%~3"
exit /b

Как видите папка "Папка 2" тут как-то ни к чему.

APST 27-04-2018 15:33 2811050

Цитата:

Цитата alpap
Как видите папка "Папка 2" тут как-то ни к чему. »

Спасибо за помощь!

megaloman 27-04-2018 16:59 2811059

alpap,
Мелкая доработка Вашего скрипта: префикс не обязательно может быть одной буквой
Код:

@Echo Off
Cls


Set "D1=Z:\Box_In"
Set "D2=Z:\Box_Out"

Set "Pref=Pre fix_"
rem Set "Pref=A"

If Not Exist "%D2%" Md "%D2%"
For /f "Delims=" %%a in ('2^>nul Dir /a-d/b "%D1%\%Pref%*.*"') Do Set "nf=*%%a" &Call :cp "%D1%\%%a" "%D2%" "%%nf:*%Pref%=%%"
pause& exit

:cp
        >nul copy "%~1" "%~2\%~3"
exit /b


alpap 27-04-2018 20:51 2811081

megaloman,
Цитата:

Цитата megaloman
"%%nf:%Pref%=%%" »

но в данном конкретном случае:
"Аимя файла" превратится в "имя фйл"

поэтому надо или конкретно предусмотреть этот вариант или делать все гораздо шире
но я не сторонник предусматривать много возможных вариантов - или один (несколько) или другой подход

megaloman 27-04-2018 21:19 2811084

alpap, Спасибо громадное. Выкрутился, исправил в решении.

APST 28-04-2018 09:35 2811128

megaloman, alpap Спасибо большое за помощь в решении задачи!


Время: 23:42.

Время: 23:42.
© OSzone.net 2001-