2014-01-29 3 views
0

Мне нужно написать простой скрипт. Дело в том, чтобы отсортировать файлы в папке, имя которой является первой буквой имени файла. Я понимаю последовательность действий (получите первую букву @fname, проверьте, существует ли папка, создайте папку, переместите файл), но я не понимаю, как все это писать без блока кода (do и end). Блокирует ли блоки do/end? Или как я могу написать этот скрипт без блока?Форматирование - сортировка файлов

+0

Приведите пример того, что вам нужно сортировать. 'Forfiles' не может быть лучшим инструментом. – foxidrive

+0

@foxidrive Файл 'test.txt' переместится в папку' t', файл 'example.exe' в папку с именем' e' и т. Д. – Eugene

ответ

2

Вот еще один метод:

@echo off 
    for %%a in (1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
     if exist "%%a*" md "%%a" 2>nul & move "%%a*" "%%a" 
    ) 
pause 
+0

да, но он хочет решение без '(' blocks ')'. – Stephan

+0

@stephen Я думаю, что OP не может интегрировать их в Forfiles. Это был вопрос «или», но OP должен будет вернуться, чтобы подтвердить или опровергнуть. : D – foxidrive

+0

Читая вопрос несколько раз больше, вы можете быть правы. В любом случае, два решения ясно показывают, насколько мощными являются эти блоки. – Stephan

0
@echo off 

dir /b /a-d *.* >tmp 
echo END OF FILE>>tmp 
echo -- start -- 

:loop 
set /p file=<tmp 
if "%file%"=="END OF FILE" goto :end 
if "%file%"=="tmp" goto :ignore 

md %file:~0,1%\%file% 2>nul 
move "%file%" "%file:~0,1%\%file%" 

:ignore 
more +1 tmp >tmp2 
del tmp 
ren tmp2 tmp 
goto :loop 

:end 
echo -- finish -- 
exit /b 

Puh - Я начинаю любить эти блоки ^^

Нет необходимости проверять, если папка уже существует, md сделает это, когда он не существует, и выдаст ошибку, если она делает есть (2>nul отправляет его в нирвану)

Смежные вопросы