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

[文件操作] 求助批处理将文件移动进以该文件名命名的文件夹里

  1. @echo off
  2. rem 根据文件名将文件移动进以该文件名命名的文件夹里
  3. cd /d "%~dp0"
  4. for /f "delims=" %%a in ('dir /a-d/b *F*.pdf') do (
  5. if "%%~nxa" neq "%~nx0" (
  6. if not exist "%%~na\" (md "%%~na\%%~na\图1")
  7. echo;"%%a" --^> "%%~na\"
  8. move "%%a" "%%~na\%%~na\图1"
  9. )
  10. )
  11. pause
复制代码
我是想截取“%%~na”前20位做为文件夹名,创建文件夹(上面的是没有截取的),并且将文件复制到里面去。这个%%~na字符的截取方式,不懂,还请帮帮忙,谢谢。不要用延时变量,不懂为什么用了后小量的使用起来没有问题,数量多了后总是在后面报错。

本帖最后由 crazy23 于 2022-1-15 22:47 编辑

谢谢……说老实话,没看明白,突然感觉延时变量还是蛮好的(只能说自己太笨)。可是不知道为什么少量的正常,一旦多了就不对,我是这么弄的。
我试着用了延时变量如下:
@echo off
rem 截取/提取文件名前几位字符作为名称来创建文件夹,并把文件剪切/移动到该新建的文件夹里
cd /d "%~dp0"
for /f "delims=" %%a in ('dir /a-d/b *F*.pdf') do (
    if /i "%%~nxa" neq "%~nx0" (
        setlocal enabledelayedexpansion        
        set "fname=%%~na"
        set "f=%%a"
        if not exist "!fname:~-%n%!\" md "!fname:~,19!F00010001\!fname:~,19!F00010001\图1"
        move "!f:~,19!F00010001#分户图.pdf" "!fname:~,19!F00010001\!fname:~,19!F00010001\图1\"
        echo;"!f!" --^> "!fname:~,19!F00010001\!fname:~,19!F00010001\图1\"
        endlocal
    )
)
echo;%#%
pause
exit


其中跑到最后就报此类问题:
前面还有好多都是正常的,"450305003004JC01488F00010001#分户图.pdf" --> "450305003004JC01488F00010001\4503
05003004JC01488F00010001\图1\"
移动了         1 个文件。
"450305003004JC01489F00010001#分户图.pdf" --> "450305003004JC01489F00010001\4503
05003004JC01489F00010001\图1\"
子目录或文件 450305003004JC01462F00010001\450305003004JC01462F00010001\图1 已经
存在。
系统找不到指定的文件。
"450305003004JC01462W00000000#宗地图.pdf" --> "450305003004JC01462F00010001\4503
05003004JC01462F00010001\图1\"

请按任意键继续. . .

TOP

  1. @echo off
  2. rem 根据文件名将文件移动进以该文件名命名的文件夹里
  3. cd /d "%~dp0"
  4. for /f "delims=" %%a in ('dir /a-d/b *F*.pdf') do (
  5. if "%%~nxa" neq "%~nx0" (
  6.   call :fun "%%a"
  7. )
  8. )
  9. pause
  10. exit /b
  11. :fun
  12. set "basename=%~n1"
  13. set "basename=%basename:~0,20%"
  14. set dstdir="%basename%\%basename%\图1\"
  15. 2>nul md %dstdir%
  16. echo;"%~1" --^> %dstdir%
  17. move "%~1" %dstdir%
复制代码
微信:flashercs
QQ:49908356

TOP

返回列表