我有一堆文件,其名称如下:
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
答案 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)
并再次调用脚本。