我想:
有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种组合中的每一种都是如此。
我希望这是有道理的。这对批处理文件是否可行?
答案 0 :(得分:0)
第一部分(适当地重命名00
)非常简单:只需在每个批处理文件中使用相应的ren
命令。
你应该可以在第二部分使用它:
IF [NOT] EXIST filename command
e.g。
IF EXISTS x11 rename x11 xXX
IF EXISTS x22 rename x22 xXX
...
(其中xXX
取决于您所在的批处理文件,并且省略了每次都将xXX
重命名为自己的行
然而,这一切都感觉有点脆弱,我想知道使用配置管理系统或软链接是否没有更强大的解决方案来解决您的潜在问题。
答案 1 :(得分: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
为了方便起见,这里有一个批处理文件。在编辑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
窗口。
允许用户输入的修订
@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