1

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

@echo off 
cd C:\folder

set /p var="Enter mmdd: "

md %var%

copy c:\folder\*%var%.txt c:\folder\%var%

exit

Теперь мой вопрос ... есть ли способ, что он просто будет автоматически создавать папки и перемещать файлы с таким же mmdd в созданной папке mmdd. Вроде как пользовательский пакетный файл, затем компьютер увидел 5 элементов, что составляет 1208 ммдд и 3 1209 ммдд. он создает папку 1208 и папку 1209 и помещает туда файлы соответственно.

РЕДАКТИРОВАТЬ: Таким образом, он попытался использовать для цикла и существовать

 @echo off

FOR /L %%x IN (101,1,931) DO ( IF EXIST "????0%%x.txt" MKDIR 0%%x )
FOR /L %%x IN (101,1,931) DO ( IF EXIST "????0%%x.txt" MOVE "????0%%x.txt" \0%%x\ )
FOR /L %%x IN (1001,1,1231) DO ( IF EXIST "????%%x.txt" MKDIR 0%%x )
FOR /L %%x IN (1001,1,1231) DO ( IF EXIST "????%%x.txt" MOVE "????0%%x.txt" \0%%x\ )
pause

но с ошибкой «Невозможно переместить несколько файлов в один файл».

я

2 ответа2

0
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
cd /D C:\folder
For %%A in (z*.txt) Do Echo:%%A|Findstr /i "^z[0-9][0-9][0-9][01][0-9][0-3][0-9].txt$" >NUL 2>&1 &&(
  Set Filename=%%A
  Set MMDD=!Filename:~3,4!
  If Not Exist !MMDD! MD !MMDD!
  Move %%A !MMDD!
)
  • Для перебирает соответствующие файлы
  • Эхо:%% A | Findstr ... проверяет шаблон из 7 чисел, грубо проверяя MM/DD
  • Использование ! вместо % для vars необходимо, потому что это внутри (кодовый блок), требующий отложенного расширения.
  • !Filename:~3,4! является выражением подстроки, извлекаемым из нуля на основе 4-й позиции 4 числа.
0

Вы можете использовать подстроку переменной даты для этого.

Syntax:
      %variable:~num_chars_to_skip%
      %variable:~num_chars_to_skip,num_chars_to_keep%

Взято из SS64.

Вот как это работает, чтобы извлечь год, месяц и день:

set year=%date:~-4%
set month=%date:~-7,2%
set day=%date:~-10,2%

Теперь вы можете ссылаться на них, например, используя mkdir C:\folder\%year%\%month%-%day% чтобы создать структуру, подобную C:\folder\2017\01-25\ .

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .