Как сделать пакетный скрипт для создания папки только из цифр в именах файлов

Я пытаюсь создать пакетный скрипт в Windows 7, чтобы сделать следующее:

У меня есть папка, в которую другая программа сбрасывает файлы. Все файлы имеют номера в своем имени вместе с другой идентифицирующей информацией. Я хотел бы, чтобы пакетный скрипт выполнял поиск всех цифр в имени файла, а затем создавал папку (имя папки — это просто цифры) и перемещал все файлы, содержащие эти цифры, в папку. Это должно быть применимо к многочисленным пользователям в моем офисе.

в настоящее время у меня работает очень плохая примитивная система, которая не учитывает ошибки:

@echo off 

setlocal enabledelayedexpansion

pushd "%USERPROFILE%\Desktop\RawFiles"

for %%a in (*) do (

  set fldr=%%~na

  set fldr=!fldr:~0,5!

  md "!fldr!"

  move "%%a" "!fldr!"

)

popd


 if not exist "%USERPROFILE%\Dropbox\agents" mkdir "%USERPROFILE%\Dropbox\agents"

 SET "src_folder=%USERPROFILE%\Desktop\RawFiles"

 SET "tar_folder=%USERPROFILE%\Dropbox\agents"

 for /f %%a IN ('dir "%src_folder%" /b') do move /-y %src_folder%\%%a %tar_folder%


exit

the files in the "rawfiles" folder are as follows:

12345 - tech pack.pdf

12345.pdf

12345-artwork.AI

"#12345- artwork.AI"

То, что я создал, работает только для идеальных случаев, когда числа идут первыми в файлах и равны ровно 5. К сожалению, здесь много человеческих ошибок, поэтому это решение нежизнеспособно. пример ошибки - случайное 6-значное число или вообще постановка знака "#" перед цифрами

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

Пожалуйста помоги!

Благодарность


person user3095874    schedule 12.12.2013    source источник


Ответы (1)


Приведенный ниже пакетный файл извлекает цифры из имен файлов в соответствии с запросом (максимум 6 групп цифр, разделенных другими символами, это может быть изменено), поэтому вы можете манипулировать ими по своему усмотрению; команды ECHO являются лишь примерами. Обратите внимание, что пробел должен быть последним символом в переменной eliminate.

@echo off
setlocal EnableDelayedExpansion

set "eliminate=#-abcdefghijklmnopqrstuvwxyz "

for %%a in (*.*) do (
   for /F "tokens=1-6 delims=%eliminate%" %%b in ("%%~Na") do set folder=%%b%%c%%d%%e%%f%%g
   if not exist "!folder!" ECHO md "!folder!"
   ECHO move "%%a" "!folder!"
)
person Aacini    schedule 12.12.2013