[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
在批处理中,如果碰到文件名后面为~1、~2、~3这种后缀需小心
因为8.3格式的短文件名后面刚好就是~1、~2、~3
http://www.bathome.net/thread-37534-1-1.html
PowerShell 不存在这个问题

TOP

本帖最后由 jcrh_bf 于 2022-8-28 23:50 编辑

回复 29# qixiaobin0715

就是把任一文件按规则命名文件(比如文件中有#号),留#号前半部分剪切到另外一个文件夹,如果目标文件夹有相同名称的文件自动再后面按顺序加(1) (2)(3)......

现在修改了几次,如果重复一次加~1没问题,后面继续就没法加~2  3  4了,应该只是识别到第一个条件反复吧~1替换了,
应该    for /f "delims=" %%k in ('dir /b /a-d %%i~*.pdf 2^>nul^|findstr /ber "%%i~[0-9]*\.pdf"') do set /a n+=1,定位到目标位置,这句现在语法有问题是不是没有定位到目标位置

@echo off

setlocal enabledelayedexpansion
for /f "tokens=1* delims=." %%i in ('dir /b /a-d *.pdf') do (

    if not exist "E:\2022年\8月\27日\%%i.pdf" (
        move "%%i.%%j" E:\2022年\8月\27日
    ) else (
        set n=1
        for /f "delims=" %%k in ('dir /b /a-d %%i~*.pdf 2^>nul^|findstr /ber "%%i~[0-9]*\.pdf"') do set /a n+=1
        move "%%i.%%j" E:\2022年\8月\27日\"%%i~!n!.pdf"
    )
)

pause

TOP

本帖最后由 jcrh_bf 于 2022-8-28 22:47 编辑

回复 30# fzp070
这样改后,显示移动文件成功,第一次没有重复的移动成功,后面有重复的,源文件夹文件不见了,但是目标文件夹里面没有文件
@echo off

setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /a-d *.pdf') do (
    for /f "delims=" %%i in ("%%i") do (
    if not exist "%%i.pdf" (
        move "%%i" E:\2022年\8月\27日
    ) else (
        set n=1
        for /f "delims=" %%k in ('dir /b /a-d %%i~*.pdf 2^>nul^|findstr /ber "%%i~[0-9]*\.pdf"') do set /a n+=1
        move "%%i#%%j" E:\2022年\8月\27日
    )
))

pause

TOP

回复 32# WHY
应该改成(n)就没有问题吧

TOP

回复 34# jcrh_bf


    好的,了解了

TOP

本帖最后由 qixiaobin0715 于 2022-8-29 16:07 编辑

回复 33# jcrh_bf
假设源文件路径为:C:\2022\8\27
目标路径为:E:\2022\8\27
在10楼代码第1~2行之间加上下面几行:
  1. cd /d "C:\2022\8\27"
  2. copy "*#*.pdf" "E:\2022\8\27"
  3. cd /d "E:\2022\8\27"
复制代码
批处理文件可放在任意地方。

TOP

回复 37# qixiaobin0715
你好,现在的问题应该下面这段代码用于剪切操作,有问题,不能识别~1  ~2  ……,这些,只有当有和源文件名一样的才重命名为~1,当有~的文件后,没法识别道继续+1变为~2,直接就把~1替换了
  ) else (
        set n=1
        for /f "delims=" %%k in ('dir /b /a-d %%i~*.pdf 2^>nul^|findstr /ber "%%i~[0-9]*\.pdf"') do set /a n+=1
        move "%%i#%%j" E:\2022年\8月\27日

TOP

返回列表