我需要有关批处理文件的帮助,该文件可以重命名文件并将文件从我的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
非常感谢帮助。 我希望我提供了足够的信息,看看这是否可行。
仅供参考我是编码批处理文件的初学者,因此非常感谢对代码的评论。
答案 0 :(得分:1)
@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
用于测试目的。 在您确认命令正确之后,将ECHO(MD
更改为MD
以实际创建目录。附加2>nul
以禁止错误消息(例如,当目录已存在时)
为了测试目的,所需的MOVE命令仅为ECHO
。 在您确认命令正确后,将ECHO(MOVE
更改为MOVE
以实际移动文件。附加>nul
以取消报告消息(例如1 file moved
)
切换到源目录
对于所需的扩展,请对包含至少2个下划线和扩展名的文件执行目录扫描
将名称标记为%%m
和%%n
(腰带和牙套 - 确保%%n
不是空的)
创建目录并移动文件。
[编辑以包括按要求记录]
[修改后的编辑:省略%
并包含引号]
答案 1 :(得分:0)
如果所有文件都具有与发布时相同的命名约定,那么使用在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
我没有对此进行过测试,因此可能会出现我错过的极端情况,但总的来说,你会明白这一点。