879792799 发表于 2018-12-3 20:13:35

求助诸位大大 批处理如何获取 含空格长文件名!!

本帖最后由 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
.......依次类推 只是备份不要覆盖以前的文件

补充17#遇到文件名中包含空格的文件 不起作用 求指点

2012jiashanni 发表于 2018-12-3 21:08:20

程序可以批处理不知道怎么写

nttwqz 发表于 2018-12-3 23:03:32

弄这么高端干嘛,Windows本来就有的功能,多粘贴几次不就好了,非要特定文件名,能认出来就行。。。

879792799 发表于 2018-12-4 05:53:27

frg521 发表于 2018-12-4 01:38
之前发过2个几乎类似的帖子,不能改良吗?不过这个比以前的简单,前提前后缀就是原文件名(-back数字).原 ...

好的 谢谢大大提醒!!!好犀利的眼神 哈哈

879792799 发表于 2018-12-4 05:55:06

nttwqz 发表于 2018-12-3 23:03
弄这么高端干嘛,Windows本来就有的功能,多粘贴几次不就好了,非要特定文件名,能认出来就行。。。

哈哈 工作使用 怕搞错了回头没有存档就尴尬了 还要重头再来啊大大!

879792799 发表于 2018-12-4 06:17:30

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:02

开源是互联网的精神

879792799 发表于 2018-12-4 17:32:57

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:26

路过拿分。

879792799 发表于 2018-12-4 19:57:32

frg521 发表于 2018-12-4 17:48
给所有文件调用处都加双引号,那些变量的!!前后%前后,所有位置,自己把执行命令代码前面加echo,变成显示 ...

谢谢大大热心指教!

879792799 发表于 2018-12-5 05:41:53

frg521 发表于 2018-12-4 17:48
给所有文件调用处都加双引号,那些变量的!!前后%前后,所有位置,自己把执行命令代码前面加echo,变成显示 ...

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

{:2_121:}

@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
页: [1]
查看完整版本: 求助诸位大大 批处理如何获取 含空格长文件名!!