Пакетное копирование файлов из одной папки в другую

Я пытаюсь скопировать некоторые файлы из одного каталога в два других каталога, используя пакет.

Сначала я создаю 3 каталога, а после этого я хочу скопировать следующие файлы в резервную копию1 и резервную копию2. Файлы называются 010101.txt — 300101.txt (в резервную копию1) и 010102.txt — 300102.txt (в резервную копию2).

mkdir backup1
mkdir backup2
mkdir backup3
copy 1.txt C:\User\Test\Backup1
copy 2.txt C:\User\Test\Backup2

Я думаю, мне нужно как-то использовать подстановочный знак, но если я напишу ?????1.txt и ?????2.txt, я получу синтаксическую ошибку.


person user3333279    schedule 20.02.2014    source источник
comment
Являются ли эти диапазоны единственными файлами в каталоге?   -  person Matt Williamson    schedule 20.02.2014
comment
Вы показываете 4 файла в 010101.txt - 300101.txt and 010102.txt - 300102.txt, потому что если это диапазоны, то они перекрываются.   -  person foxidrive    schedule 20.02.2014
comment
Там есть эти 60 файлов .txt и несколько файлов .bat, а также каталоги резервных копий. Это ты имел в виду?   -  person user3333279    schedule 20.02.2014
comment
Нет, это файлы. Существует файл с именем 010101.txt и все номера до 300101.txt и еще 30 файлов .txt, которые заканчиваются на 02. Достаточно ли я ясно выразился?   -  person user3333279    schedule 20.02.2014


Ответы (2)


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

@echo off
setlocal enabledelayedexpansion

cd /d "C:\Temp\copytest"
set "b1=C:\Temp\Backup1"
set "b2=C:\Temp\Backup2"
for /l %%a in (1,1,300102) do (
  set num=%%a
  if %%a GTR 10000 if %%a LSS 100000 set num=0%%a
  if !num:~-1! EQU 1 (
     if exist !num!.txt echo copy !num!.txt %b1%
  ) ELSE (
     if !num:~-1! EQU 2 (
       if exist !num!.txt echo copy !num!.txt %b2%
     )
  )
)

Измените пути, где это применимо. Удалите эхо после проверки правильности вывода, чтобы сделать фактическую копию.

Изменить: проще

Copy *1.txt "C:\User\Test\Backup1"
Copy *2.txt "C:\User\Test\Backup2"
person Matt Williamson    schedule 20.02.2014
comment
Привет, Мэтт. Спасибо за ваш ответ, но это слишком много для того, что я ищу. Это для школьного задания, где мы учимся программировать. Я должен быть в состоянии объяснить, что я делаю. По словам моего учителя, это должно быть возможно сделать, просто используя команду копирования и подстановочный знак. Я просто не могу уложить в голове, как это сделать. Еще раз спасибо за ваше время ! - person user3333279; 20.02.2014
comment
Это решило это! Я на самом деле пробовал это раньше, но пропустил . Большое спасибо :-) - person user3333279; 20.02.2014

@ECHO OFF
SETLOCAL
SET "sourcedir=."
FOR %%b IN (1 2) DO (
 FOR /f "delims=" %%a IN (
  'dir /b /a-d "%sourcedir%\*.txt" ^| find /i "%%b.txt" '
   ) DO (
  XCOPY "%sourcedir%\%%a" "c:\user\test\backup%%b\" >nul
 )
)
GOTO :EOF

Я предположил, что вы хотите, чтобы все файлы в каталоге, содержащие 1.txt, были скопированы в ...\backup1, а файлы, содержащие 2.txt, в ...\backup2.

Я использовал свой текущий каталог для тестирования. Вам нужно будет изменить значение, присвоенное 'sourcedir', чтобы оно подходило вам.

Обратите внимание, что xcopy при необходимости создаст каталог назначения.

person Magoo    schedule 20.02.2014
comment
Спасибо вам за помощь ! Однако нашел более простое решение. Но спасибо за ваше время. - person user3333279; 20.02.2014
comment
сначала я хочу создать резервную папку с датой и временем, а после этого я хочу вставить в нее файлы, как я могу это сделать? - person Saad Awan; 01.07.2020