. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 关闭主题
 
主题工具
Huangwen
 
Huangwen 的头像
高级会员
 
资 料:
注册日期: Sep 2004
帖子: 616 声望值: 3
精华: 0,解答: 16
#1 旧 2010-10-31, 18:37:58 默认 已解答: 【求助】求批处理
Huangwen 当前离线  

求二个批处理,功能:
1.选择一个或多个文件(夹),可将这些文件(夹)移动到上一层目录,如上层目录有同名文件(夹),自动重命名为“原文件(夹)名_new”。
2.在当前目录下选择一个或多个文件夹,把所选文件夹内的文件移动到当前目录,如当前目录有同名文件,自动重命名为“原文件名_new”,移出后删除选定的文件夹。
谢谢!

此帖于 2010-11-01 15:52:08 被 Huangwen 编辑. .
最佳解答为:mouze
批处理一:move_up.cmd
代码:
@echo off
:st
if not exist "..\%~nx1" (move "%~dpnx1" ..) else (
   for /l %%L in (1,1,9999) do if not exist "..\%~n1(%%L)%~x1" (move "%~dpnx1" "..\%~n1(%%L)%~x1"&goto shift)
   )
:shift
shift
if not [%1]==[] goto st
批处理二:move_here.cmd
代码:
@echo off
:st
if not exist "%~nx1\*.*" goto shift
for %%A in ("%~nx1\*.*") do (
    if not exist "%%~nxA" (move "%%~dpnxA" .) else call:ren "%%A"
    )
rd "%~nx1"||echo "%~nx1"&&pause
:shift
shift
if not [%1]==[] goto st
goto :eof

:ren
for /l %%L in (1,1,9999) do if not exist "%~n1(%%L)%~x1" (move "%~dpnx1" "%~n1(%%L)%~x1"&goto :eof)
goto :eof
请务必备份数据后再试用!
mouze
 
mouze 的头像
热心会员
 
资 料:
注册日期: Apr 2002
帖子: 8,208 声望值: 13
精华: 5,解答: 65
#2 旧 2010-11-01, 11:30:13 默认
mouze 当前离线  

是配合TC用的?怎样实现多选?我试了一下,用空格多选文件(夹)后,只能执行最后一个文件(夹)?

另外,如果文件有重复,重新命名后就会改变扩展名了,比如:A.txt变成A.txt_new

此帖于 2010-11-01 14:29:26 被 mouze 编辑. .
Huangwen
 
Huangwen 的头像
高级会员
 
资 料:
注册日期: Sep 2004
帖子: 616 声望值: 3
精华: 0,解答: 16
#3 旧 2010-11-01, 14:11:26 默认
Huangwen 当前离线  

谢谢回复:
是配合TC,TC的多选参数是%P%S。文件名重复,命名规则换成xxx(1).ext可好?
mouze
 
mouze 的头像
热心会员
 
资 料:
注册日期: Apr 2002
帖子: 8,208 声望值: 13
精华: 5,解答: 65
#4 旧 2010-11-01, 15:33:24 默认
mouze 当前离线  

批处理一:move_up.cmd
代码:
@echo off
:st
if not exist "..\%~nx1" (move "%~dpnx1" ..) else (
   for /l %%L in (1,1,9999) do if not exist "..\%~n1(%%L)%~x1" (move "%~dpnx1" "..\%~n1(%%L)%~x1"&goto shift)
   )
:shift
shift
if not [%1]==[] goto st
批处理二:move_here.cmd
代码:
@echo off
:st
if not exist "%~nx1\*.*" goto shift
for %%A in ("%~nx1\*.*") do (
    if not exist "%%~nxA" (move "%%~dpnxA" .) else call:ren "%%A"
    )
rd "%~nx1"||echo "%~nx1"&&pause
:shift
shift
if not [%1]==[] goto st
goto :eof

:ren
for /l %%L in (1,1,9999) do if not exist "%~n1(%%L)%~x1" (move "%~dpnx1" "%~n1(%%L)%~x1"&goto :eof)
goto :eof
请务必备份数据后再试用!

此帖于 2010-11-02 10:14:48 被 mouze 编辑. . 原因: 修正move_here.cmd的一个BUG
Huangwen
 
Huangwen 的头像
高级会员
 
资 料:
注册日期: Sep 2004
帖子: 616 声望值: 3
精华: 0,解答: 16
#5 旧 2010-11-01, 15:54:09 默认
Huangwen 当前离线  

引用:
作者: mouze 查看帖子
批处理一:move_up.cmd
[CODE]@echo off
t
if not exist "..\%~nx1" (move "%~dpnx1" ..) else (
for /l %%L in (1,1,9999) do if not exist "........
测试通过,非常感谢!!!
发表新主题 关闭主题

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 11:59:00.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号