批处理文件,用于创建目录并根据部分文件名移动文件

时间:2017-09-29 01:54:45

标签: windows batch-file

我有一堆文件,其名称如下:

BS01_1234_1234.jpg
BS01_1235_6789.jpg
TP01_1234_6879.jpg

全部保存在本地C盘文件夹中。

我希望将这些文件移到联网文件夹\\autrsrv02\Tempdata\Justine Tennent\movetofolder,但会根据文件名BS01_1234的前9个字符分组到子文件夹中。

到目前为止我有以下但没有运气。

此代码用于移动文件:

move /-y "C:\Users\jtennent\Documents\testbatchfile\**.jpg" "\\autrsrv02\Tempdata\Justine Tennent\movetofolder"

pause

但我试过这个来创建子文件夹并且没有运气

@ECHO OFF
SETLOCAL
SET "sourcedir=*C:\Users\jtennent\Documents\testbatchfile*"
PUSHD %sourcedir%
FOR /f "tokens=1,2,3,4 delims=_" %%a IN (
 'dir /b /a-d "*_*.jpg"'
 ) DO (  
 MD %%a_%%b 2>nul
 MOVE "%%a_%%b_%%c_%%d" .\%%a_%%b\ >nul
)
POPD
GOTO :EOF

任何帮助都将不胜感激。

修改

以下群体但过早分裂

@echo off
for %%A in (.psd *.jpg) do (
    for /f "tokens=1 delims=_" %%D in ("%%~nA") do (
        md "%%D" 2>nul
        echo Moving file %%A to folder %%D
        move "%%A" "%%D" >nul
    )
)
echo Finished
pause

1 个答案:

答案 0 :(得分:0)

下面是一些未经测试的示例代码(它应该将文件移动到新位置,同时从新位置删除文件名中的前十个字符) < / p>

@Echo off
Set "SrcDir=%UserProfile%\Documents\testbatchfile"
Set "DstDir=\\autrsrv02\Tempdata\Justine Tennent\movetofolder"

If Not Exist "%DstDir%\" Exit/B
If /I Not "%CD%"=="%SrcDir%" PushD "%SrcDir%" 2>Nul||Exit/B

For /F "EOL=_ Tokens=1,2* Delims=_" %%A In (
    'Where .:"????_????_*.psd" .:"????_????_*.jpg"') Do (
    If Not Exist "%DstDir%\%%A_%%B\" MD "%DstDir%\%%A_%%B"
    Echo Moving "%%A_%%B_%%C" to "%DstDir%\%%A_%%B\%%C"
    Rem Move /-Y "%%A_%%B_%%C" "%DstDir%\%%A_%%B\%%C")

Echo Finished
Pause

更改第2行和第2行中的位置3,以满足您的要求。如果您对输出更改行12感到满意:

    Move /-Y "%%A_%%B_%%C" "%DstDir%\%%A_%%B\%%C">Nul)

并再次调用脚本。