2013-04-14 316 views
0

我想:批处理文件重新命名5个文件夹(取代)

  • 有5个文件夹= 00,11,22,33,44(00用作虚设)

  • 和4 batchfiles = BF11,BF22,BF33,BF44

我启动BF11并让文件夹11变为00,文件夹00变成x11。

假设在这一点上我启动BF44 - 这需要:

  • [通过寻找X11的存在?]命名当前00回原来的(11)

  • 重命名44进入00和x11到X44 [00现在X44]

现在假设我启动BF33,这需要:

  • 重命名当前00回到其原始(44)[通过找到X44的存在?]

  • 重命名33到00和X44到X33 [00现在是X33]

等等4个组合。

我希望它是有道理的。批处理文件有可能吗?

回答

0
@ECHO OFF 
SETLOCAL 
cd /d "whereveryouwant" 
FOR %%i IN (00 11 22 33 44) DO IF .%1==.%%i GOTO swap 
ECHO invalid parameter&pause&GOTO :eof 
:swap 
FOR %%i IN (11 22 33 44) DO IF EXIST x%%i (
REN 00 %%i 
IF %1==00 REN x%%i 00&GOTO :EOF 
REN %1 00 
REN x%%i x%1 
GOTO :eof 
) 
IF %1==00 GOTO :EOF 
REN 00 x%1 
REN %1 00 
GOTO :EOF 

为了更容易,这里有一个批处理文件来做到这一点。简单地具有编辑"whereveryouwant"后运行thisbatch 11(或22等)为00的父目录,11等的名称

它确实被检查所提供的参数是有效的,回声的错误消息的第一件事如果无效则暂停。

然后它查找x11..x44。如果发现说x33,它

  • 改变0033
  • 变化(比如说)1100
  • 改变x33(虚拟),以x11
  • 退出

如果找不到x33

  • 变化00到(比方说)x11
  • 变化1100
  • 出口

的纠结是的00的条目。如果提供00作为参数,则它会查找x11..x44。如果发现说x33,它

  • 改变0033
  • 改变x33(虚拟),以00
  • 退出

,但如果没有“x`目录中找到,它确实没有。

因此,输入'00'将恢复原始目录集 - 00作为假人。

我在整个过程中都使用了“GOTO :EOF” - 这是退出批处理的正常方法。在你的情况下,你可能需要将其中的每一个更改为EXIT以关闭CMD窗口。


修订,以允许用户输入

@ECHO OFF 
SETLOCAL 
CD /d "c:\wherever\your\directories\are" 
SET selection=%1 
IF DEFINED selection GOTO validate 
:getfromuser 
SET "selection=" 
SET /p selection="Please enter selection 11..44 : " 
IF NOT DEFINED selection GOTO :eof 
:validate 
FOR %%i IN (00 11 22 33 44) DO IF .%selection%==.%%i GOTO swap 
ECHO invalid selection %selection%&GOTO getfromuser 
:swap 
FOR %%i IN (11 22 33 44) DO IF EXIST x%%i (
REN 00 %%i 
IF %selection%==00 REN x%%i 00&GOTO :EOF 
REN %selection% 00 
REN x%%i x%selection% 
GOTO :eof 
) 
IF %selection%==00 GOTO :EOF 
REN 00 x%selection% 
REN %selection% 00 
GOTO :EOF 

基本上相同的程序,不同之处在于如果不提供或提供无效选择中的选择时,用户将被提示输入新的选择。只需按此提示的回车键即可终止程序。

如果这是快捷方式运行,它可能是一个想法,与EXIT

+0

您好,感谢您都为你的答案全部更换GOTO :EOF命令。我已经尝试了彼得的代码,但我得到一个无效的参数(肯定我有一个名为k的文件夹,并在里面00,11,22等..所以我改变“whereveryouwant”与“k”)..我要去现在尝试第一个示例 – Francis

+0

您可能需要使用'C:\ k' - 完整路径。当你运行批处理时,你需要运行'thisbatch 11'(或者22,或者33或者44或者00)。如果你没有给它一个参数,或者给它一个参数,而不是这五个参数之一,它会显示'无效的参数' – Magoo

+0

好吧,我花了3个小时,尝试了我认为的一切,并使用Google搜索代码,但无法使其工作...如果任何人都可以带领我前进,这将是伟大的..(也是头痛的补救措施,请!) – Francis

0

第一部分(适当重命名为00)很简单:只需在每个批处理文件中使用相应的ren命令即可。

您应该能够使用此为第二部分:

IF [NOT] EXIST filename command 

例如

IF EXISTS x11 rename x11 xXX 
IF EXISTS x22 rename x22 xXX 
... 

(其中xXX取决于你所在的批处理文件,并且您省略,将每次重命名xXX自身行)

然而,这一切都感觉有点脆弱,我不知道通过使用配置管理系统或软链接,您的基础问题没有更强大的解决方案。