Невозможно переместить файлы в папки с помощью командных файлов - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь создать папки, используя часть имени файла (первые 10 цифр уникальных цифр), а затем переместить файлы в соответствующие папки.Я могу создавать папки, но по какой-то причине не могу переместить файлы в папку.Есть идеи почему?Вот мой код:

@echo off
for /f %%a in ('dir /a-d /b') do (
  if not "%%~dpnxa"=="%~dpnx0" call :func "%%~a"
)
goto :EOF
:func
set file=%~1
set dir=%file:~0,10%
md "%dir%" 2>nul
move "%file%" "%dir%" 
goto :EOF

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Хотя это кажется странным, вы также можете использовать RoboCopy для перемещения файлов.В следующем примере команда Where используется для выбора только тех файлов, которые содержат не менее 10 символов, (это означает, что вы можете оставить имя сценария менее 10 символов и вам не нужно его фильтровать) :

@Echo Off
SetLocal EnableDelayedExpansion
For /F "Delims=" %%A In ('Where .:??????????*.*') Do (Set "FN=%%~nA"
    RoboCopy . "!FN:~,10!" "%%~nxA" /Mov>Nul)

Имейте в виду, что это не мешает созданию каталогов, которые заканчиваются пробелами, то есть 10-й символ имени файла - это пробел , которыйможет вызвать проблемы позже!

0 голосов
/ 18 мая 2018

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

Так что, чтобы исправить эту попыткудобавление "delims=" в цикл for для пропуска разделителей по умолчанию, по умолчанию являющихся пробелами.

@echo off
for /f "delims=" %%a in ('dir /a-d /b') do (
  if not "%%~dpnxa"=="%~dpnx0" call :func "%%~a"
)
goto :EOF
:func
set file=%~1
set "dir=%file:~0,10%"
md %dir% 2>nul
move "%file%" "%dir%"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...