Войти

Показать полную графическую версию : Перенос файлов + переименование


Corecess
20-11-2019, 21:34
Помогите, пожалуйста, со скриптом. Нужен скрипт для переноса и переименования файлов, если такой файл присутствует в целевом каталоге. Поиск по форуму результатов не дал, ничего не работает, что нашла. Ошибки. Может, потому что Виндовс 10? Я сама не сильно разбираюсь, поэтому прошу помощи. Буду крайне благодарна

DJ Mogarych
20-11-2019, 22:12
https://sumtips.com/snippets/powershell/copy-files-rename-duplicates-subfolder/

Corecess
20-11-2019, 22:58
https://sumtips.com/snippets/powershell/copy-files-rename-duplicates-subfolder/

Спасибо большое!

megaloman
21-11-2019, 15:57
CMD. Переносит указанные файлы из папки и её подпапок. При наличии дубликата, к имени дописывается номер. Максимальный номер 999 (=1000-1). Можете в параметре N число нулей (не равное нулю) в этом максимуме менять в любую сторону @Echo Off
Set "FileIn=Z:\Box_In\*.*"
Set "BoxOut=Z:\Box_Out"
Set /A N=1000

For /F "usebackq delims=" %%f In (`xcopy "%FileIn%" "%BoxOut%\" /S /L /F /Y`) Do (
Set "Out=%%f"
Call :ReMove %N% "%%Out: -> =" "%%"
)
Exit /B 0

:ReMove
If "%~3"=="" Exit /B 0
Set /A i=%1
Set "FileOut=%~3"
If Not Exist "%~dp3" Md "%~dp3"
:Begin
If Not Exist "%FileOut%" >nul Move %2 "%FileOut%" &Exit /B
Set /A i+=1
Set "FileOut=%~dpn3_%i:~1%%~x3%"
GoTo :Begin
Exit /B
@Echo Off
Set "FileIn=Z:\Box_In\*.*"
Set "BoxOut=Z:\Box_Out"
Set /A N=1000

For %%f In ("%FileIn%") Do Call :ReMove %N% "%%~f" "%BoxOut%\%%~nxf"
Exit /B 0

:ReMove
If "%~3"=="" Exit /B 0
Set /A i=%1
Set "FileOut=%~3"
If Not Exist "%~dp3" Md "%~dp3"
:Begin
If Not Exist "%FileOut%" >nul Move %2 "%FileOut%" &Exit /B
Set /A i+=1
Set "FileOut=%~dpn3_%i:~1%%~x3%"
GoTo :Begin
Exit /B

alpap
21-11-2019, 19:08
без ограничений по кол-ву:
1. Не лезем в подпапки

@echo off
set "d_in=C:\papka_in"
set "d_out=C:\papka_out"

for /f "delims=" %%a in ('dir /a-d/b "%d_in%"') do call :l "%d_out%" "%d_in%\%%a"
exit

:l
setlocal
pushd "%~1"
if not exist "%~n2%n%%~x2" (>nul copy "%~2" "%~n2%n%%~x2"& del "%~2") else (set /a n+=1& goto l)
popd
endlocal
exit /b


2. Лезем в подпапки

@echo off
set "d_in=C:\papka_in"
set "d_out=C:\papka_out"

for /f "delims=" %%a in ('dir /a-d/b/s "%d_in%"') do call :l "%d_out%" "%%a"
exit

:l
setlocal
pushd "%~1"
if not exist "%~n2%n%%~x2" (>nul copy "%~2" "%~n2%n%%~x2"& del "%~2") else (set /a n+=1& goto l)
popd
endlocal
exit /b

в моем коде путь: "C:\papka_out" должен существовать или надо добавить строку (перед стр.5, в начале кода, после указания переменных)

if not exist "%d_out%" md "%d_out%"

если достаточно копировать. а не перемещать, то из стр.11 убрать: & del "%~2"

Corecess
21-11-2019, 19:16
Спасибо!




© OSzone.net 2001-2012