0

我想:

  • 有 5 个文件夹 = 00、11、22、33、44(00 充当虚拟对象)

  • 和 4 个批处理文件 = BF11、BF22、BF33、BF44

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

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

  • 将当前的 00 重命名回原来的 (11) [通过找到 x11 的存在?]

  • 将 44 重命名为 00 并将 x11 重命名为 x44 [00 现在是 x44]

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

  • 将当前的 00 重命名为原来的 (44) [通过查找 x44 的存在?]

  • 将 33 重命名为 00 并将 x44 重命名为 x33 [00 现在是 x33]

4 种组合中的每一种,依此类推。

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

4

2 回答 2

0

The first part (renaming 00 appropriately) is straightforward: just use the appropriate ren command in each batch file.

You should be able to use this for the second part:

IF [NOT] EXIST filename command

e.g.

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

(where xXX depends on the batch file you're in, and you omit the line that would rename xXX to itself each time)

However, this all feels a little fragile and I wonder if there isn't a more robust solution to your underlying problem by using either a configuration management system or soft links.

于 2013-04-14T16:42:37.923 回答
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 

为了使它更容易,这里有一个批处理文件。编辑为 00, 11 等的父目录名后直接运行thisbatch 11(或22等)即可。"whereveryouwant"

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

然后它寻找 x11..x44。如果它找到 say x33,它

  • 更改0033
  • 改变(比方说1100
  • x33(假人)更改为x11
  • 退出

如果找不到x33

  • 改变00为(说)x11
  • 更改1100
  • 出口

扭结用于00. 如果00作为参数提供,则它会查找 x11..x44。如果它找到 say 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 

本质上是相同的程序,除了如果未提供选择或提供了无效选择,将提示用户进行新选择。只需按回车键响应此提示将终止程序。

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

于 2013-04-14T16:49:39.923 回答