首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Batchfile重命名5个文件夹(替换)

Batchfile重命名5个文件夹(替换)
EN

Stack Overflow用户
提问于 2013-04-14 15:37:00
回答 2查看 170关注 0票数 0

我想:

  • 有5个文件夹= 00,11,22,33,44 (00作为一个虚拟)
  • 4批文件= BF11、BF22、BF33、BF44

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

假设此时我启动了BF44 --这需要:

  • 通过查找x11的存在,将当前的00重命名为原来的(11)?
  • 将44重命名为00,将x11重命名为x44 00,现在为x44

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

  • 通过查找x44的存在,将当前的00重命名为原来的(44)?
  • 将33重命名为00,将x44重命名为x33 00,改为x33

四个组合中的每一个都是如此。

我希望这是合理的。这在批处理文件中是可能的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-14 16:49:39

代码语言:javascript
运行
复制
@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 

为了更简单,这里有一个批处理文件来完成它。只需运行thisbatch 11 (或22等)将"whereveryouwant"编辑为父目录00、11等的名称之后。

它所做的第一件事是检查提供的参数是否有效,并回显错误消息,如果无效则暂停。

然后寻找x11..x44。如果它发现了x33,它

  • 00更改为33
  • 11更改为00
  • x33 (虚拟)更改为x11
  • 出口

如果它找不到x33

  • 00更改为(例如) x11
  • 11更改为00
  • 出口

扭结是为了00的一个条目。如果00是作为参数提供的,那么它将查找x11..x44。如果它发现了x33,它

  • 00更改为33
  • x33 (虚拟)更改为00
  • 出口

但是,如果找不到‘x’目录,则什么也不做。

因此,输入'00‘将恢复原始目录集- 00作为虚拟目录。

我一直使用"GOTO :EOF“--这是退出批处理的正常方法。在您的示例中,您可能需要将其中的每一个更改为EXIT,以关闭CMD窗口。

允许用户输入的修订

代码语言:javascript
运行
复制
@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 

本质上是相同的程序,但如果没有提供所选内容或提供了无效的选择,用户将被提示输入新的选择。只需使用enter键响应此提示符将终止程序。

如果这是从快捷方式运行的,那么最好将所有GOTO :EOF命令替换为EXIT

票数 0
EN

Stack Overflow用户

发布于 2013-04-14 16:42:37

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

您应该能够将其用于第二部分:

代码语言:javascript
运行
复制
IF [NOT] EXIST filename command

例如:

代码语言:javascript
运行
复制
IF EXISTS x11 rename x11 xXX
IF EXISTS x22 rename x22 xXX
...

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

然而,这一切都感觉有点脆弱,我想知道是否没有一个通过使用配置管理系统或软链接来解决根本问题的更健壮的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16000862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档