使用filename的子字符串创建一个文件夹

时间:2017-03-28 07:41:23

标签: batch-file directory

我想从文件名中提取两个子字符串,以便创建文件夹字符串 我的文件名是“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 个答案:

答案 0 :(得分: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%")
相关问题