批处理文件重命名多个文件并移动到文件夹
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
非常感谢对此的帮助。
我希望我已经提供了足够的信息来查看这是否可行。
仅供参考,我是编写批处理文件的初学者,因此非常感谢对代码的评论。
如果所有文件都具有与您发布的相同的命名约定,那么使用在 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
我还没有对此进行测试,所以我可能遗漏了一些特殊情况,但总的来说你明白了。
@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
您需要更改 sourcedir
和 destdir
的设置以适合您的情况。
所需的 MD 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO(MD
更改为MD
以实际创建目录。附加 2>nul
以抑制错误消息(例如,当目录已经存在时)
所需的 MOVE 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO(MOVE
更改为MOVE
以实际移动文件。附加 >nul
以禁止报告消息(例如 1 file moved
)
切换到源码目录
对于所需的扩展名,请对至少包含 2 个下划线和扩展名的文件进行目录扫描。
将名称标记为 %%m
和 %%n
(安全带 - 确保 %%n
不为空)
创建目录并移动文件。
[根据要求进行了编辑以包括日志记录]
[修改后的编辑:省略 %
并包含引号]
我需要有关批处理文件的帮助,该批处理文件可以重命名文件并将其从我的 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
非常感谢对此的帮助。 我希望我已经提供了足够的信息来查看这是否可行。
仅供参考,我是编写批处理文件的初学者,因此非常感谢对代码的评论。
如果所有文件都具有与您发布的相同的命名约定,那么使用在 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
我还没有对此进行测试,所以我可能遗漏了一些特殊情况,但总的来说你明白了。
@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
您需要更改 sourcedir
和 destdir
的设置以适合您的情况。
所需的 MD 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO(MD
更改为MD
以实际创建目录。附加 2>nul
以抑制错误消息(例如,当目录已经存在时)
所需的 MOVE 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO(MOVE
更改为MOVE
以实际移动文件。附加 >nul
以禁止报告消息(例如 1 file moved
)
切换到源码目录
对于所需的扩展名,请对至少包含 2 个下划线和扩展名的文件进行目录扫描。
将名称标记为 %%m
和 %%n
(安全带 - 确保 %%n
不为空)
创建目录并移动文件。
[根据要求进行了编辑以包括日志记录]
[修改后的编辑:省略 %
并包含引号]