繁体   English   中英

批处理文件以重命名多个文件并移至文件夹

[英]Batch File to rename multiple files and move to folder

我需要批处理文件的帮助,该文件可以将文件从c:\\ SaveAttachments重命名并将其移动到C:\\ Users \\ Omer \\ Documents \\中的多个文件夹中

我在c:\\ SaveAttachments(.pdf,.doc,.xls)中大约有5000个文件

例如(aacom_880072_4860914.pdf或.doc或.xls)例如(bbcom_880082_4860914.pdf或.doc或.xls)

将aacom_ 880072 _4860914重命名为880072并将其移动到C:\\ Users \\ Omer \\ Documents \\ aacom

将bbcom_ 880082 _4860914重命名为880082并将其移动到C:\\ Users \\ Omer \\ Documents \\ bbcom

非常感谢您对此的帮助。 我希望我提供了足够的信息以查看这是否可行。

仅供参考,我是编写批处理文件的初学者,因此非常感谢您对代码的评论。

@ECHO Off
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
set "logfile=U:\logfile.log"
PUSHD "%sourcedir%
>>"%logfile%" echo start at %date% %time%
FOR %%x IN (pdf doc xls) DO (
 FOR /f "delims=" %%a IN (
   'dir /b /a-d "*_*_*.%%x" '
   ) DO (
    FOR /f "tokens=1,2*delims=_" %%m IN ("%%a") DO IF "%%n" neq "" (
    ECHO(MD "%destdir%\%%m"
    >>"%logfile%" ECHO(MD "%destdir%\%%m"
    ECHO(Move "%%a" "%destdir%\%%m\%%n.%%x"
    >>"%logfile%" ECHO(Move "%%a" "%destdir%\%%m\%%n.%%x"
   )
 )
)
POPD
>>"%logfile%" echo end at %date% %time%

GOTO :EOF

您需要更改sourcedirdestdir的设置以适合您的情况。

所需的MD命令只是ECHO编用于测试目的。 验证命令正确无误后 ,将ECHO(MD更改为MD以实际创建目录。附加2>nul以禁止显示错误消息(例如,当目录已存在时)

所需的MOVE命令仅仅ECHO编用于测试目的。 确认命令正确无误后 ,将ECHO(MOVE更改为MOVE即可实际移动文件。Append >nul可禁止报告消息(例如,已1 file moved

切换到源目录
对于所需的扩展名,请执行目录扫描以查找带有至少两个下划线和扩展名的文件。
将名称标记为%%m%%n
(带括号-确保%%n不为空)
创建目录并移动文件。

[根据要求进行编辑,以包括日志记录] [修订的编辑:省略%并包含引号]

如果所有文件都具有与您发布的相同的命名约定,则使用在Cygwin中执行的Bash shell脚本应该相对容易一些。

src='/cygdrive/c/SaveAttachments'
dst="/cygdrive/c/Users/Omer/Documents"
for file in $(find $src -type f)
do
    prefix=${file%%_*}
    if [[ ! -e $dst/$prefix ]]
    then
        mkdir -p $prefix
    fi
    name=$(cut -d_ -f2 $file)
    mv $file $dest/$name
done

我尚未对此进行测试,因此可能遗漏了一些极端情况,但总的来说您会明白这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM