我想:
我启动BF11,让文件夹11变成00,文件夹00变成x11。
假设此时我启动了BF44 --这需要:
现在假设我启动了BF33,这需要:
四个组合中的每一个都是如此。
我希望这是合理的。这在批处理文件中是可能的吗?
发布于 2013-04-14 16:49:39
@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更改为3311更改为00x33 (虚拟)更改为x11如果它找不到x33
00更改为(例如) x1111更改为00扭结是为了00的一个条目。如果00是作为参数提供的,那么它将查找x11..x44。如果它发现了x33,它
00更改为33x33 (虚拟)更改为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 本质上是相同的程序,但如果没有提供所选内容或提供了无效的选择,用户将被提示输入新的选择。只需使用enter键响应此提示符将终止程序。
如果这是从快捷方式运行的,那么最好将所有GOTO :EOF命令替换为EXIT。
发布于 2013-04-14 16:42:37
第一部分(适当地重命名00 )非常简单:只需在每个批处理文件中使用适当的ren命令即可。
您应该能够将其用于第二部分:
IF [NOT] EXIST filename command例如:
IF EXISTS x11 rename x11 xXX
IF EXISTS x22 rename x22 xXX
...(其中xXX取决于您所在的批处理文件,并且省略了每次将xXX重命名为自身的行)
然而,这一切都感觉有点脆弱,我想知道是否没有一个通过使用配置管理系统或软链接来解决根本问题的更健壮的解决方案。
https://stackoverflow.com/questions/16000862
复制相似问题