使用批处理命令判断,如果有在同一文件夹下有两个同名文件,则后一个文件自动加数字后缀

我编写了一个bat批处理,解决桌面文件乱的问题,将桌面文件(除了系统自带的“我的电脑”之类的)使用move命令转移到一个固定文件夹M中,已经可以实现,但是有一个问题,遇到第二次及以后再运行该批处理,遇到同名文件,则无提示自动覆盖,可能会造成意想不到的损失。在此请教高手帮忙添加判断后移动进指定文件夹的文件如a.txt与M文件夹中同样存在的a.txt进行比较,如果内容不相同,则将后进入M文件夹的a.txt改名,后面加序号或者执行命令的日期都可以。不要简单告诉我使用if、ren语句,我是菜鸟,请给出具体判断和更名语句,万分感谢!还要考虑以后每次都可能遇到的同名文件,比如第二次a.txt改名成a2.txt,那么第三次如果有a.txt,就必须避免再改成a2.txt了,所以可能需要使用变量之类的。给出我已经写好的代码,请高手补充:
@echo off
color 2f
title Wa-清爽桌面
mode con lines=2 cols=32
echo.
echo 正在转移桌面文件到桌面文件包……
move "%USERPROFILE%"\桌面\*.* "%USERPROFILE%"\桌面\桌面文件包
move "%USERPROFILE%"\桌面\桌面文件包\*.lnk "%USERPROFILE%"\桌面\
exit

个人认为加个时间戳是最可靠可行的办法,现有a.txt, 若文件包中已有a.txt  则命名a.txt 为

a_%data%_%time%.txt

 

这样保证了文件的唯一性,

代码如下:

@echo off&setlocal enabledelayedexpansion
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set hours=%time:~0,2%
set min=%time:~3,2%
set sec=%time:~6,2%
set var=%year%%month%%day%_%hours%%min%%sec%
set mess="%USERPROFILE%"\桌面\桌面文件包\"
set desktop="%USERPROFILE%"\桌面\"
for /f "tokens=*" %%a in ('dir /a-d /b !desktop!') do (
    set "fn=%%a"
    set "fnb=%%~na"
    set "fnf=%%~xa"
    if "!fnf!" neq ".bat" (
        if exist "!mess!!fnb!!fnf!" (
            ren "!fn!" "!fnb!_!var!!fnf!"
            move "!fnb!_!var!!fnf!" "!mess!" 
        )else (
            move "!fn!" "!mess!" 
        )
    )
)
pause

追问

运行后说无法找到文件?

追答@echo off&setlocal enabledelayedexpansion
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set hours=%time:~0,2%
set min=%time:~3,2%
set sec=%time:~6,2%
set var=%year%%month%%day%_%hours%%min%%sec%
set mess="%USERPROFILE%\桌面\桌面文件包\"
set desktop="%USERPROFILE%\桌面\"
for /f "tokens=*" %%a in ('dir /a-d /b !desktop!') do (
    set "fn=%%a"
    set "fnb=%%~na"
    set "fnf=%%~xa"
    if "!fnf!" neq ".bat" (
        if exist "!mess!!fnb!!fnf!" (
            ren "!fn!" "!fnb!_!var!!fnf!"
            move "!fnb!_!var!!fnf!" "!mess!" 
        )else (
            move "!fn!" "!mess!" 
        )
    )
)
pause

追问

这次说是“命令语法错误”……我头大了,看起来是完全一样的代码,为什么连无法运行的结果都不一样,顺便说下,我是在XP 系统下保存为.bat后运行的。求指教在xp系统下能正常运行的代码。tks

追答

等我明天好好检查检查。。

温馨提示:内容为网友见解,仅供参考
无其他回答

使用批处理命令判断,如果有在同一文件夹下有两个同名文件,则后一个文件...
个人认为加个时间戳是最可靠可行的办法,现有a.txt, 若文件包中已有a.txt 则命名a.txt 为 a_%data%_%time%.txt 这样保证了文件的唯一性,代码如下:echo off&setlocal enabledelayedexpansionset year=%date:~0,4%set month=%date:~5,2%set day=%date:~8,2%set hours=%time:~0,2%set ...

请教批处理复制2个文件夹相同文件名,后缀不同文件到新的目录里_百度知...
echo off & title 移动相同名的文件 By 依梦琴瑶cd \/d "%~dp0"::设置A路径set A_Path=A::设置B路径set B_Path=A\\B::设置C路径set C_Path=A\\C::设置D路径set D_Path=A\\Dfor \/f "delims=" %%a in ('dir \/a-d\/s\/b "%B_Path%\\*"') do ( if exist "%C_Path%\\%%...

如何用批处理判断不同目录下的两个文件的文件名相同?
复制粘贴到记事本,另存为xx.bat,编码选ANSI echo off rem 检测判断两个文件夹里是否存在相同名称的文件 set #=Any question&set @=WX&set $=Q&set\/az=0x53b7e0b4 title %#% +%$%%$%\/%@% %z set "folder1=D:\\xxx\\A"set "folder2=D:\\xxx\\B"set isexist=false for \/f "delim...

求批处理搜索指定文件夹下搜索文件名加後缀。若有重复名称,以最新修 ...
) start "%last%"pause查找最新的test.txt,打开所在文件夹

电脑怎么对比两个文件夹里的文件如何找出同一电脑中不同文件夹中的相 ...
找出同一电脑中不同文件夹中的相同文件的方法如下:可以下载一个软件比如everything使用方法如下:1、首先,我们点击打开everything软件,可以使用便携版或者安装版。D. 批处理两个文件夹对比选出相同文件,A复制到B 不清楚你的实际文件\/情况,仅以问题中的说明及猜测为据;以下代码复制粘贴到记事本,另存...

求一个批处理bat命令,将一个文件夹下的文件名统一做加减一个数字的更改...
(md "E:\\test\\temp\\")::复制文件并重命名copy "%%a" "E:\\test\\temp\\!name!%%~xa")pause注:因为在原文件夹更名会出现重名的情况(如15.jpg和17.jpg,如果17.jpg先更名就会有两个15.jpg),所以先把更名后的文件复制到一个临时文件夹 您的采纳是我们的动力和鼓励,请及时点击【采纳回答】

怎么使用批处理或命令行在每个文件夹名称后面加上文件夹内对应的文件...
建议楼主学学autoit脚本 实现起来比较简单的、有许多好用的函数可以调用 include <File.au3> father = "D:\\A"child = _FileListToArray($father, "*", 2)For $i = 1 To $child[0]n = _FileListToArray($father & "\\" & $child[$i], "*", 1)If $n = 0 Then ContinueLoop If...

批处理复制文件至指定文件夹,并自动重命名。
F:\\合并\\黑色\\*.*') do (move %%i F:\\合并\\%%~ni黑%%~xi)for \/f %%i in ('dir \/s \/b F:\\合并\\透明\\*.*') do (move %%i F:\\合并\\%%~ni透%%~xi)rd F:\\合并\\黑色\\rd F:\\合并\\透明\\上面只考虑了主图里没有子文件夹,副图里只有两个子文件夹。 如果与实际不符请说明 ...

求DOS批处理:一个文件夹下有若干子孙文件夹,要对这些文件夹进行若干处理...
echo off&setlocal enabledelayedexpansioncd\/d "d:\\一个文件夹":choiceclsecho 请选择给一级子文件重命令方式(1 \/ 2)set\/p q=1 命名为序号,2 原名去#和空格: if "%q%"=="1" (set q=rem )else ( if "%q%"=="2" (set q=)else goto :choice)echo 正在移动文件:for \/f ...

如何通过批处理判断2个文件的更新时间差来执行另外一个批处理?
要实现这个功能,你可以使用Windows的批处理文件(.bat)或者PowerShell脚本。以下是一个简单的批处理文件示例,它使用命令提示符(cmd)的命令来比较两个文件的时间戳,并执行指定的操作。首先,创建一个名为reboot.bat的文件,并将其放在D:\\1\\1文件夹中,或者将以下内容复制到已有的reboot.bat文件中:...

相似回答