Скрипт пакетного перемещения выдает синтаксическую ошибку, не перемещает файлы - PullRequest
0 голосов
/ 31 мая 2019

У меня есть следующий скрипт
, который хорошо работает с файлами с простыми именами.
Но файлы, которые мне нужны, имеют следующий шаблон имен: (. # A # - ## - ## - ## ABCD-ABCD - ## abc_abcdef_a # - ## - ##)

в основном комбинация букв, цифр, одного периода, тире, дефиса и одной запятой и без пробелов
где вы видите символ # - цифры.
Начальные номера (#.) От 0 до 10000.
имена файлов имеют длину от 72 до 76 символов в зависимости от их номера ID. все они одного типа (но это не имеет значения, скрипт не зависит от расширения)

выдает ошибку:

Синтаксис команды неверен.

Мне кажется, проблема в том, что имена файлов начинаются с цифры или имеют точку в имени.

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

Я попытался использовать chcp 65001 вверху файла, но это не имеет значения.

Я очень новый пакетный сценарий и не знаю, как обойти эту проблему. Я попытался найти ошибку, но это похоже на общую ошибку msg.

@echo off
set /a counter=1
set /a filesperfolder=100
cd dir\dir_main

:loopstart
set dirname=subdir%counter%
md %dirname%
echo %dirname%

dir /b | findstr /v /i "subdir*"> %temp%\temp.txt && for /l %%l in (1,1,%filesperfolder%) do @for /f "tokens=1,2* delims=:" %%a in ('findstr /n /r "^" %temp%\temp.txt ^| findstr /r "^%%l:"') do @move %%b %dirname%\%%b >nul

set /a counter=%counter%+1
for /f "tokens=*" %%a in ('type %temp%\temp.txt ^| find /c /v ""') do set _filesmoved=%%a
del %temp%\temp.txt
IF %_filesmoved% LSS 100 goto done

goto loopstart

:done
cls
echo All files were moved!!
pause
exit

Проблема не в количестве файлов, а в именах файлов. Скрипт не имеет проблем с простыми (как и все буквы) именами файлов.

1 Ответ

0 голосов
/ 03 июня 2019

Я вошел и удалил разные символы, чтобы увидеть, какая именно комбинация вызывает проблему. Проблема вызвана запятой и пробелами в имени файла.

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

@echo off
setlocal enabledelayedexpansion
for %%a in (*, *) do (
  set file=%%a
  ren "!file!" "!file:, =_!"
)

Также найден более простой движущийся скрипт

@echo off
set SourceDir=%~dp0\SourceFolder
set TargetDir=%~dp0\Targetfolder
set MaxFiles=100
for /f "tokens=1* delims=[]" %%G in ('dir /A-D /B "%SourceDir%\*.*" ^|
find /v /n ""') do (
move "%SourceDir%\%%~nxH" "%TargetDir%\"
if %%G==%MaxFiles% exit /b 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...