2014-09-26 2 views
2

В настоящее время я пишу командный файл, который начинается с определенного каталога - допустим, C:\FirstFolder\SecondFolder\ThirdFolder\ - и должен выполнять задачу в каждой из этих папок, затем переходить в одну папку, пока она не будет достигло корневого каталога (C:\).Проверьте, является ли текущая папка корневым каталогом

Проблема здесь состоит в том, что диск мы работаем не должны быть C:\, это может быть любой буквы диска, так что я не могу просто проверить, если %cd% равен C:\, чтобы сообщить программе, чтобы остановить проходящие через каждый каталог.

Может ли кто-нибудь помочь в этом?

+0

Что делать, если вы говорите что-то вроде «if (current.dir.has_parentdir), то« поднимайтесь »? – doniyor

ответ

4

Как это:

if "%cd:~3,1%"=="" echo IS ROOT 
+0

Я просто подумал о проверке длины'% cd% 'несколько секунд назад тоже. где эта проверка завершится неудачно, так что она работает нормально! – JoelP

+0

@JoelP, есть вероятность сбоя, если кто-то «установил» cd = c: \ где-то », недействительный тест. –

+1

И независимо от пользователей, cd', может быть, я ошибаюсь, но правильный тест не является '% cd: ~ 3,1%'? Вы можете иметь папку 'c: \ x'. –

2
for %%a in (.) do for %%b in (..) do if "%%~fa"=="%%~fb" echo ROOT FOLDER 

Если полный путь к текущей папке такой же, как полный путь к папке, мы в корне

+2

+1. Это можно упростить, если для «%% ~ fA» == «%% ~» сделать одно значение FOR/F 'for/f" tokens = 1,2 "%% A в (". .. ") fB «echo ROOT FOLDER». Это решение - самый простой способ проверки, который можно протестировать. Тест '% CD: ~ 3%' может потерпеть неудачу, если пользователь определяет переменную компакт-диска. Даже '% __ CD __: ~ 3' может выйти из строя на XP, если пользователь определяет значение для __CD__. – dbenham

+0

@dbenham, очень приятно. Спасибо. –

1

Тест %cd:~3% может fail, если есть пользовательская переменная CD, которая переопределяет динамическое значение.

Безопаснее использовать %__CD__:~3%, поскольку он не может быть переопределен на Win 7 или Win 8. Не уверен в Vista, но он может быть переопределен на XP. Так что это решение не лучше или хуже %CD:~3%, если на XP.

if "%__cd__:~3%"=="" echo ROOT FOLDER 

Смотрите Why can't I access a variable named __CD__ on Windows 7? для получения дополнительной информации о нечетном поведении %__CD__%.

+0

Эффективно безопаснее +1 – SachaDee

Смежные вопросы