CMD/BAT - Перенос файлов + переименование

Ответить
Аватара пользователя
Corecess

CMD/BAT - Перенос файлов + переименование

Сообщение Corecess »

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

Re: CMD/BAT - Перенос файлов + переименование

Сообщение megaloman »

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




Если подпапки трогать не надо, то:

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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

Re: CMD/BAT - Перенос файлов + переименование

Сообщение alpap »

без ограничений по кол-ву:

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"
Ответить

Вернуться в «Скриптовые языки администрирования Windows»