CMD для Windows 7: обробка папок, ігнорування тих, що починаються з "."


1

Я хочу знайти папку, назва якої починається fld- . FORдозволяє мені використовувати символи:

for /D %%f in ("fld-*") do set FOLDER=%%f

Однак із такими папками:

.fld-blah\
fld-blahblah\
afld-blah\

він також (дещо несподівано) знаходить той, що починається, " . ".

Я вирішив протестувати перший char за допомогою оператора DOS LEFT . Схоже, це не працює на FORзмінних ( %%Fтут), тому мені потрібно спочатку призначити його звичайній змінній. Запуск наступного .batфайлу двічі (ви побачите чому):

@echo off 
for /D %%f in ("fld-*") do (
set TEST=%%f
echo f:         %%f
echo TEST:      %TEST%
echo TEST[0,1]: %TEST:~0,1%
echo.
)

видає такий вихід:

C:\Users\Bob\Desktop\test>test.bat
f:         fld-blahblah
TEST:
TEST[0,1]: ~0,1

f:         .fld-blah
TEST:
TEST[0,1]: ~0,1


C:\Users\Bob\Desktop\test>test.bat
f:         fld-blahblah
TEST:      .fld-blah
TEST[0,1]: .

f:         .fld-blah
TEST:      .fld-blah
TEST[0,1]: .

TESTЗдається, присвоюється лише після завершення FOR (...)групи команд.

Тому. Хто-небудь може мені сказати:

  1. Чи можу я змусити forігнорувати імена папок, які починаються з крапки?
  2. Чи є синтаксис, який я можу використовувати, щоб застосувати LEFTоператор до forзмінної %%F,?
  3. Чи є спосіб я призначити змінну І використовувати її в (...)циклі
  4. Чи є якийсь інший метод, який я можу використовувати для досягнення своєї мети (в рамках DOS, я знаю, що я можу використовувати Powershell, cygwin тощо)?

2
Що саме "приховано"? ಠ_ ఠ
Synetech

Я б використав XYplorer (www.xyplorer.com), якби я був ти, у нього дуже делікатна вбудована мова сценаріїв. (Так само як пропозиція)
Яків Рабінсун

@Synetech Вибачте, що я в режимі Linux - "". папка - це те, що я мав на увазі (звичайно, це не приховано в Windows). Я зміню заголовок.
Боб Саммерс

Ага гаразд; що повністю змінює речі. Я хоч ти запитував щось інше . Це дивно, тому що, хоча провідний період зробив би папку безіменною і складається лише з розширення, ви не використовували жодного з ~комутаторів, тому вона все одно повинна була працювати. І так, уповільнене розширення легко забути і засмутити, коли це робити. :-/
Synetech

Відповіді:


0

Про це говорили годинами, і мені просто світало те, що мені потрібно було Google.

Відповідь полягає у використанні затримки змінної розширення, тому test.batсценарій стає:

@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION
for /D %%f in ("fld-*") do (
set TEST=%%f
echo f:         %%f
echo TEST:      !TEST!
echo TEST[0,1]: !TEST:~0,1!
echo.
)

і поводиться так, як потрібно:

C:\Users\Bob\Desktop\test>test.bat
f:         fld-blahblah"
TEST:      fld-blahblah
TEST[0,1]: f

f:         .fld-blah"
TEST:      .fld-blah
TEST[0,1]: .
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.