Пакетно сделать каталог с подкаталогами из имен файлов - PullRequest
1 голос
/ 03 февраля 2012

Я ищу пакет для создания каталога с подкаталогами из имен файлов и копирования файлов с такими же именами в директорию директорий.У меня есть несколько файлов с именами, такими как: 032557.txt, 032557.csv, 032557.log, 054784.csv, 054784.txt, 054784.log и т. Д. У меня есть пакет, который делает каталог с именем из файла и копировать все файлы с тем жеимена в каталоге содержимого.В результате у меня есть каталог 054784 с файлом 054784.csv, 054784.txt, 054784.log.Мне нужен каталог результатов 054784 с подкаталогами: CSV (где мне нужен файл 054784.csv), TXT (где мне нужен файл 054784.txt) и LOG (где мне нужен файл 054784.log) и т. Д.

@echo off 
for /f "delims=" %%a in ('dir /b /a-d') do ( 
  if not "%%~fa"=="%~f0" ( 
    md "%%~na" 2>nul 
    if exist "%%a" move "%%~na.*" "%%~na" 
  ) 
)

Есть предложения?

1 Ответ

1 голос
/ 03 февраля 2012

%% ~ xa даст расширение файла.Единственный немного сложный бит - это удаление ведущей точки из расширения.

Все последующее не проверено.Они должны работать, если у меня нет глупых ошибок.

@echo off
setlocal enableDelayedExpansion
for %%A in (*) do (
  if not "%%~fA"=="%~f0" (
    set "ext=%%~xA"
    if defined ext set "ext=!ext:~1!"
    md "%%~dpnA\!ext!" 2>nul
    move "%%A" "%%~dpnA\!ext!"
  )
)

Если имя файла может содержать ! или ^, то вышеприведенное не будет работать, потому что задержанное расширение повредит расширение %% A.Следующий вариант решит эту проблему:

@echo off
setlocal disableDelayedExpansion
for %%A in (*) do (
  if not "%%~fA"=="%~f0" (
    set "ext=%%~xA"
    set "proj=%%~dpnA"
    set "file=%%A"
    setlocal enableDelayedExpansion
    if defined ext set "ext=!ext:~1!"
    md "!proj!\!ext!" 2>nul
    move "!file!" "!proj!\!ext!"
    endlocal
  )
)

В качестве альтернативы вы можете использовать это, чтобы обойти проблемы ! и ^:

@echo off
setlocal disableDelayedExpansion
for %%A in (*) do if not "%%~fA"=="%~f0" call :moveFile "%%~fA"
exit /b

:moveFile
set "ext=%~x1"
if defined ext set "ext=%ext:~1%"
md "%~dpn1\%ext%" 2>nul
move %1 "%~dpn1\%ext%"
exit /b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...