无忧启动论坛

标题: 求助诸位大大 批处理如何获取 含空格长文件名!! [打印本页]

作者: 879792799    时间: 2018-12-3 20:13
标题: 求助诸位大大 批处理如何获取 含空格长文件名!!
本帖最后由 879792799 于 2018-12-5 20:10 编辑

如下代码我修改的! 实际使用中一直搞不定{含空格长文件名} 本人能力低微求高手帮忙修改下!

如下代码本意是拖动生成文件备份1 再拖动生成备份2。。。。实际使用中一直搞不定{含空格长文件名}
@echo &&setlocal enabledelayedexpansion

set file=%1
set fn="%~n1"
set fe="%~x1"
set bakDir=%CD%

if exist %bakDir%\%"fn"%%"fe"% (
  call :copyFileExist
) else (
  copy %"file"% %bakDir%\ /y
)

GOTO :EOF
:copyFileExist
set ext=1
:until_no_file
if exist %bakDir%\%fn%★★★★★BACK!ext!%fe% (
  set /a ext+=1 >nul
  goto :until_no_file
)
copy %file% %bakDir%\%fn%★★★★★BACK!ext!%fe%

GOTO :EOF











OLD------------------------------------------------------------------
诸位大大请教下
我想拖动文件到批处理上 在当前目录自动(请不要直接重命名原文件)复制此文件副本并且重命名源文件名添加BACK1
如果我再次拖动文件到批处理上 自动复制此文件并且重命名源文件名添加BACK2
如果我再再次拖动文件到批处理上 自动复制此文件并且重命名源文件名添加BACK3
.....
比如
我拖动1.WIM到批处理上 在同目录下生成 1.WIM的副本并且自动重命名为1-BACK1.WIM
我再次拖动1.WIM到批处理上 在同目录下生成 1.WIM的副本并且自动重命名为1-BACK2.WIM
我再再次拖动1.WIM到批处理上 在同目录下生成 1.WIM的副本并且自动重命名为1-BACK3.WIM
.......依次类推 只是备份不要覆盖以前的文件

补充1  7#遇到文件名中包含空格的文件 不起作用 求指点
作者: 2012jiashanni    时间: 2018-12-3 21:08
程序可以  批处理不知道怎么写
作者: nttwqz    时间: 2018-12-3 23:03
弄这么高端干嘛,Windows本来就有的功能,多粘贴几次不就好了,非要特定文件名,能认出来就行。。。
作者: 879792799    时间: 2018-12-4 05:53
frg521 发表于 2018-12-4 01:38
之前发过2个几乎类似的帖子,不能改良吗?不过这个比以前的简单,前提前后缀就是  原文件名(-back数字).原 ...

好的 谢谢大大提醒  !!!好犀利的眼神 哈哈
作者: 879792799    时间: 2018-12-4 05:55
nttwqz 发表于 2018-12-3 23:03
弄这么高端干嘛,Windows本来就有的功能,多粘贴几次不就好了,非要特定文件名,能认出来就行。。。

哈哈 工作使用 怕搞错了回头没有存档就尴尬了 还要重头再来啊大大!
作者: 879792799    时间: 2018-12-4 06:17
frg521 发表于 2018-12-4 01:38
之前发过2个几乎类似的帖子,不能改良吗?不过这个比以前的简单,前提前后缀就是  原文件名(-back数字).原 ...

求指点错误  我自己修改后 出现无法多个备份 只能产生一个备份
还有错误就是遇见文件名字里面包含空格的无反应(比如 RRRR LLL.LSP就无反应)

@echo off &&setlocal enabledelayedexpansion

set file=%1
set fn=%~n1
set fe=%~x1
set bakDir=%cd%

if exist %bakDir%\%fn%%fe% (
  call :copyFileExist
) else (
  copy %file% %bakDir%\ /y
)
echo finished.
ping 127.1 -n 2 >NUL
GOTO :EOF

:copyFileExist
set ext=1
set ex=%BACK
:until_no_file
if exist %bakDir%\%fn%-!ext!.%fe% (
  set /a ext+=1 >nul
  goto :until_no_file
)
copy %file% %bakDir%\%fn%-!ex!!ext!%fe%
goto :EOF

作者: huiyao_zhou    时间: 2018-12-4 07:43
开源是互联网的精神
作者: 879792799    时间: 2018-12-4 17:32
frg521 发表于 2018-12-4 07:49
把原作者内容完全抄写,只改最后一行,添加在扩展名前,的数数字前固定数据

最后就是空格处理在一个完整 ...

我依照您的意思 修改一下 还差一点 求指教  遇到(1 23 .DWG类似带空格的文件任然无效)
@echo off &&setlocal enabledelayedexpansion

set file=%1
set fn="%~n1"
set fe="%~x1"
set bakDir=%CD%

if exist %bakDir%\%fn%%fe% (
  call :copyFileExist
) else (
  copy %file% %bakDir%\ /y
)
echo finished.
ping 127.1 -n 2 >NUL
GOTO :EOF

:copyFileExist
set ext=1
:until_no_file
if exist %bakDir%\%fn%-!ext!.%fe% (
  set /a ext+=1 >nul
  goto :until_no_file
)
copy %file% %bakDir%\%fn%-BACK!ext!.%fe%
goto :EOF

作者: huiyao_zhou    时间: 2018-12-4 18:59
路过拿分。
作者: 879792799    时间: 2018-12-4 19:57
frg521 发表于 2018-12-4 17:48
给所有文件调用处都加双引号,那些变量的!!前后%前后,所有位置,自己把执行命令代码前面加echo,变成显示 ...

谢谢大大热心指教!
作者: 879792799    时间: 2018-12-5 05:41
frg521 发表于 2018-12-4 17:48
给所有文件调用处都加双引号,那些变量的!!前后%前后,所有位置,自己把执行命令代码前面加echo,变成显示 ...

呵呵 谢谢 做了一个目前无缺点 待改进



@echo &&setlocal enabledelayedexpansion

set file=%1
set fn="%~n1"
set fe="%~x1"
set bakDir=%CD%

if exist %bakDir%\%"fn"%%"fe"% (
  call :copyFileExist
) else (
  copy %"file"% %bakDir%\ /y
)

GOTO :EOF
:copyFileExist
set ext=1
:until_no_file
if exist %bakDir%\%fn%★★★★★BACK!ext!%fe% (
  set /a ext+=1 >nul
  goto :until_no_file
)
copy %file% %bakDir%\%fn%★★★★★BACK!ext!%fe%

GOTO :EOF




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3