6

Вот что у меня есть:

C:\test\12345-test1.txt
C:\test\23456-test2.txt
C:\test\44444-test3.doc

Я хотел бы, чтобы скрипт прочитал первые 5 цифр из файла, создал папку с этими цифрами и добавил перед ней букву T.

Результат после запуска должен быть таким:

C:\test\T12345\12345-test1.txt
C:\test\T23456\23456-test2.txt
C:\test\T44444\44444-test3.doc

В настоящее время у меня есть это, которое выполняет функцию; Я просто не могу понять, куда поместить команду SET, чтобы извлечь 5 символов.

@echo off
for %%a in (*.*) do (
md "T%%a" 2>nul
move "%%a" "T%%~a"  
)

Я думаю, что это нужно добавить, чтобы выбрать только первые 5 символов:

set first5=%%a:~5,1%

Мысли?

3 ответа3

1

Вы можете использовать это, чтобы получить первые пять символов:

set first5=%a:~0,5%

set присваивает значение после = first5 . %a% вернет значение переменной a , добавив следующие символы, которые вы ссылаетесь на диапазон, начиная с символа 0 и следующих пяти.

1
@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,5%
md "T%dir%" 2>nul
move "%file%" "T%dir%" 
goto :EOF

Это обработает файлы (= не каталоги) в рабочем каталоге. Я также добавил флажок, чтобы скрипт не перемещал сам командный файл на тот случай, если он окажется в wd.

0

Пока вы испытываете трудности, чтобы узнать что-то, почему бы не узнать что-то стоящее? В PowerShell:

$x = gci ; $x | % { $d = 'T' + $_.Name.Substring(0,5) ; mkdir $d ; move $_ $d } | Out-Null

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .