Создать папку, используя подстроку имени файла

Я хочу получить две подстроки из моего имени файла, чтобы создать строку папки.
Мой файл называется "SM-SM-ABC_ab12 cd34_AA 11_abc123.txt"
здесь "ab12 cd34" - первая папка, а "AA 11" - вторая папка
Я написал код, но после добавления кода @Compo я не могу переместить файл в каталог. Я хочу переместить несколько файлов в соответствующие папки. Может кто-нибудь помочь, что не так?

@Echo Off

set Path1= d:\A
:: SDate=DAYMONTHYEAR FORMAT of Systemdate
echo %Path1%
set SDate=%date:~7,2%%date:~4,2%%date:~10,4%
echo %SDate%

::Variable for folder path

Pushd %Path1%
for %%i in (*.*) do SET "FPath=%%~ni"
For /F "Tokens=2-3 Delims=_" %%A In ("%FPath%") Do (
    Set "FoldOne=%%A"
    Set "FoldTwo=%%B"
if not exist "%Path1%\%FoldOne%\%FoldOne%\%SDate%" (
   mkdir "%Path1%\%FoldOne%\%FoldOne%\%SDate%" )
   move %Path1%\* "%Path1%\%FoldOne%\%FoldTwo%\%SDate%\"
echo test %Path1%
echo test %FPath%
)

GoTo :EOF

1 ответ

Решение

Это то, что вы пытаетесь достичь?

@Echo Off

Set "FPath=SM-SM-ABC_ab12cd34_AA11_abc123.txt"

For /F "Tokens=2-3 Delims=_" %%A In ("%FPath%") Do (
    Set "FoldOne=%%A"
    Set "FoldTwo=%%B")

Echo(%%FoldOne%%=%FoldOne%
Echo(%%FoldTwo%%=%FoldTwo%

Timeout -1
GoTo :EOF

[Редактировать /]
Следующий код может предоставить вам решение для ваших обновленных требований:

@Echo Off
Set "Path1=D:\A"
If /I Not "%CD%"=="%Path1%" Pushd "%Path1%" 2>Nul || Exit/B
For /F "EOL=L" %%A In ('WMIC OS GET LocalDateTime') Do For %%B In (%%~nA
) Do Set "SDate=%%B"
Set "SDate=%SDate:~6,2%%SDate:~4,2%%SDate:~,4%"
For %%A In ("*_*_*_*.*") Do Call :Sub "%%A"
Timeout -1
GoTo :EOF

:Sub
For /F "Tokens=2-3 Delims=_" %%A In (%1) Do If Not "%%A"=="" If Not "%%B"=="" (
    If Not Exist "%%A\%%B\%SDate%\" MD "%%A\%%B\%SDate%"
    Move %1 "%%A\%%B\%SDate%")
Другие вопросы по тегам