Создавайте имена подпапок из части имени файла и копируйте файлы с помощью Robocopy.

Можно ли автоматически копировать и создавать каталоги из подстрок имени файла с помощью Robocopy?

Я имею в виду, что у меня есть такие файлы. LAJ00306130201004626.rc первые 8 символов – это контрольный номер (LAJ00306=контрольный номер), это будет имя папки, а остальные – дата и время (Date=130201) ( время=004626).

LAJ00306130201004626.rc
LAJ00306130202004626.rc
LAJ00306130203004626.rc
LAJ00307130201004626.rc
LAJ00307130202004626.rc

и я хотел бы копировать и создавать папки из имени файла, как показано ниже, и копировать файлы, упомянутые ранее, в новые папки.

LAJ00306
LAJ00307

Я надеюсь быть ясным, если необходимо, спросите меня для получения дополнительной информации


person Miguel    schedule 22.07.2013    source источник


Ответы (3)


Попробуй это:

@echo off
pushd "c:\source folder"
setlocal enabledelayedexpansion
for %%a in (*.rc) do (
    set "name=%%a"
    robocopy "%cd%" "%%a" "D:\target directory\!name:~0,8!" 
)
popd

Ответы на ваши вопросы:

pushd "drive:\path" делает местоположение текущим рабочим каталогом.
popd восстанавливает последний рабочий каталог
setlocal enabledelayedexpansion позволяет вам изменять и использовать переменные в цикле, используя !variable! синтаксис.

Если ваши 2000 файлов находятся в одной папке, это должно работать, но сначала протестируйте его на некоторых файлах-образцах, чтобы увидеть, как это будет работать.

person foxidrive    schedule 22.07.2013
comment
Спасибо, foxidrive, не могли бы вы объяснить мне, для чего нужны pushd, popd и enabledelayedexpansion. Это более 2000 файлов, которые я должен копировать каждый день, это сработает в этом состоянии, с уважением - person Miguel; 23.07.2013
comment
Спасибо, Foxidrive, это действительно работает, большое спасибо. Этот сайт действительно крут. увидимся, Фоксидрайв - person Miguel; 23.07.2013

попробуйте это, посмотрите на вывод и удалите echos перед MD и ROBOCOPY, если это выглядит хорошо:

@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcefolder=."
SET "targetfolder=X:\data"

CD /d "%sourcefolder%"
FOR %%a IN (*.rc) DO (
    SET "fname=%%a"
    SET "folder=!fname:~0,8!"
    SET "$!folder!=1"
)

FOR /f "delims=$=" %%a IN ('set "$"') DO (
    ECHO MD "%targetfolder%\%%a" 2>nul
    ECHO ROBOCOPY "%sourcefolder%" "%targetfolder%\%%a" "%%a*.rc"
)

Установите sourcefolder и targetfolder для вашего дерева папок.

person Endoro    schedule 22.07.2013
comment
Эндоро, спасибо за ответ, я только что проверил ваш код, но он не работает, я мало знаю о синтаксисе пакетного сценария и т. Д., Я просто изменил путь к исходной папке и целевой папке, если бы вы могли объяснить мне, как работает этот код . В основном это $!folder!=1 почему ! !, извините мои низкие знания, - person Miguel; 23.07.2013

@ECHO OFF
SETLOCAL
SET "sourcedir=."
SET "destdir=c:\destdir"
FOR /f "tokens=1*delims=_" %%i IN (
 'dir /b /a-d "%sourcedir%\*_*."'
) DO XCOPY /b "%sourcedir%\%%i_%%j" "%destdir%\%%i\"
GOTO :EOF

Это должно выполнить описанную задачу. Конечно, вам нужно настроить исходный и целевой каталоги. Добавьте >nul в конец строки XCOPY, чтобы скрыть "скопированные" сообщения.

person Magoo    schedule 22.07.2013
comment
Здравствуйте, Петр, спасибо за ответ. Я просто обновляю свою проблему, чтобы быть более ясной, я надеюсь, что вы можете нам помочь. Проблема здесь в том, что я должен использовать Robocopy, ваша процедура может быть использована с Robocopy? С уважением - person Miguel; 23.07.2013