Пакетный файл для перемещения между симметричными структурами папок - PullRequest
1 голос
/ 25 октября 2019

Я работаю в проекте с симметричной структурой папок, а именно:

  • Мастер
    • Папка1
      • Папка_A1
    • Папка2
    • Папка3
  • Подчиненный
    • Папка1
      • Папка_A1
    • Папка2
    • Folder3

Во время работы я обычно переключаюсь между ведущим и ведомым в одни и те же каталоги. Я хочу создать пакетный файл, который поможет мне переключать только каталог maste / slave с этим, я хочу что-то вроде этого:

C:\Project\Master\Folder1\FolderA1>BatchFile
C:\Project\Slave\Folder1\FolderA1>

Я планирую создать 2 пакета, toMaster и toSlave, которые принимают текущийкаталог и заменяет строку «Master» на «Slave», а затем перемещается в этот каталог. Вот что у меня есть в пакете toSlave:

@echo OFF
setlocal ENABLEDELAYEDEXPANSION
set word=Slave
set "str=%cd%"
echo %str%
set str=%str:Master=!word!%
echo %str%    
pushd %str%

Кажется, это правильно заменяет строки, но когда я запускаю его из терминала, это не меняет мой текущий каталог. Любая идея ?

Спасибо

1 Ответ

1 голос
/ 25 октября 2019

Ваш подход не работает, потому что вы сделали setlocal. Когда пакетный файл заканчивается, выполняется имплицит endlocal, который отменяет pushd. Есть еще одна причина, по которой вы не должны использовать pushd: она сохраняет текущее местоположение в стеке и делает это слишком часто, может привести к переполнению стека. Лучше использовать cd.

Ваш пакетный файл очень перегружен. Большинство строк не нужны, и вы можете сделать все остальное одной командой.

Все, что вам нужно для toSlave.bat, это:

@cd /d "%__cd__:\Master\=\Slave\%"

(или вы используете @ Compo's Toggle)"подход. Это довольно элегантно, но тогда ваша задача - убедиться, что вы находитесь в правильной папке)

...