[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 新手赐教批处理根据文件名创建文件夹并移动文件

当前文件夹内文件名称示例:
通知:12345(办公室).doc
通知:23456(财务部).doc
通知:34567(后勤部).docx
通知:45678(办公室).docx
通知:56789(财务部).docx
根据以上示例,创建名为“办公室”的文件夹,把办公室的2份通知文件放入该文件夹,财务部的文件同理,但后勤部不创建、不移动,即2个文件以上的部门创建并移动到文件夹,1个文件的部门则不用

目前的代码:
  1. @echo off
  2. for /f "delims=(). tokens=2" %%b in ('dir /b *.doc *.docx') do (
  3. echo %%a %%b %%c %%d
  4. if not exist "%%b\" md "%%b"
  5. move "%%a(%%b)%%c.%%d" "%%b\"
  6. )
  7. pause
复制代码
目前面临的问题:目前已成功创建文件夹,但无法移动,显示”系统找不到指定的文件
下一步问题:如何实现2个文件以上的部门创建文件夹,1个文件的部门不用处理

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4.   
  5. for /f "delims=" %%a in ('dir /a-d /b *.doc') do (
  6.   for /f "tokens=2 delims=()" %%b in ("%%a") do (
  7.     set group_%%b=!group_%%b!,"%%a"
  8.     set /a "count_%%b+=1"
  9.   )
  10. )
  11. for /f "tokens=1* delims==" %%a in ('set count_') do (
  12.   if %%b geq 2 (
  13.     for /f "tokens=1* delims=_" %%c in ("%%a") do (
  14.       md "%%d\" 2>nul
  15.       for %%e in (!group_%%d!) do (
  16.         echo move %%e "%%d\"
  17.          move %%e "%%d\"
  18.       )
  19.     )
  20.   )
  21. )
  22. endlocal
  23. pause
  24. exit /b
复制代码
微信:flashercs
QQ:49908356

TOP

回复 1# oepcih
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2 delims=()" %%a in ('dir /b /a-d *.doc') do set /a "_%%a+=1"
  4. for /f "tokens=1* delims==_" %%i in ('set _') do (
  5.     if %%j neq 1 (
  6.         md "%%i"
  7.         move "*%%i*.doc?" "%%i">nul
  8.     )
  9. )
  10. pause
复制代码

TOP

返回列表