2015-10-15 3 views
1

Ранее в Windows 7 мне удалось изменить путь к файлу папки «Мои документы» на карту сети (например, документы H: \ John Doe). Поскольку мы перешли на Windows 7, мне пришлось использовать обходной путь, создав связанный файл из папки на диске C в сопоставленное местоположение и включив его в библиотеку «Мои документы», прежде чем файл будет фактически связан.Использование подстановочного знака для папки с использованием SymbolicLink

Наша текущая структура файла идет как - \\servername\homefolder\%username%\John Doe Documents или \\servername\homefolder\%username%\johndoedocuments. Мне нужно покрыть обе папки при создании символической ссылки.

Вот сценарий, я использую в настоящее время

@echo off 

mkdir c:\Documents 
echo. 
echo. 

echo Right click My Documents and add C:\Documents to the Library Locations. 
echo. 
echo. 

pause 
rd C:\Documents 
mklink /D C:\Documents \\servername\homefolder\%username%\*documents\ 

В настоящее время это не работает. Если я удалю * документы \, он действительно работает. Причина, по которой я пытаюсь это сделать, заключается в том, что мы также размещаем файл pst для пользователей Outlook в папке \% username%, и мы предпочли бы, чтобы пользователь не видел эту папку и потенциально удалял ее. Вместо этого они просто перейдут непосредственно в папку с документами.

Любая помощь? Надеясь, что это просто, я пропал без вести. Заранее спасибо!

+0

Вы не можете использовать групповые символы, как это, за исключением; однако, я думаю, что «Пользовательские документы» могут быть только локализованными именами Windows, поэтому на самом деле они скорее всего называются просто «Документами» на диске ... – aschipfl

+0

Вот и проблема возникает, я не был оригиналом один из них настроен таким образом, чтобы некоторые пользователи были установлены как: 'h: \ abc1234 \ johndoedocuments' и другие: ' h: \ abc1234 \ john doe documents'. Поэтому я пытаюсь заставить его поймать хотя бы одно из этих имен файлов в сценарии, если это возможно. Извините за путаницу в формулировке. Я исправлю это! – MackMan

+0

, если у вас есть список пользователей, возможно, в текстовом файле, вы можете пройти через него с помощью 'for/F' и использовать предлагаемые' if exist' запросы [ниже] (http://stackoverflow.com/a/33157531/ 5047996) внутри петли; версия без пробелов может быть построена с использованием синтаксиса замены строк (см. 'set /?'), затем ... – aschipfl

ответ

1

Вы можете использовать if exist ..., чтобы определить, какой путь существует.

if exist "\\servername\homefolder\%username%\John Doe Documents" (
    mklink /D C:\Documents "\\servername\homefolder\%username%\John Doe Documents\" 
    goto :eof 
) 
if exist "\\servername\homefolder\%username%\johndoedocuments" (
    mklink /D C:\Documents "\\servername\homefolder\%username%\johndoedocuments\" 
    goto :eof 
) 

Обновление.

Я думаю, вы могли бы использовать подстановочные знаки таким образом

for /d %%A in (\\servername\homefolder\%username%\*documents) do (
    if exist "%%~fA" (
     mklink /D C:\Documents "%%~fA" 
     goto :eof 
    ) 
) 
+0

Могу ли я использовать подстановочный знак в этой опции, вместо того, чтобы использовать имя человека? Я хочу реализовать это на протяжении всего объекта. Могу ли я написать более сложный сценарий, чтобы выполнить поиск папок, содержащих слово «Документы», а затем ввести это как переменную? – MackMan

+0

Да, вы можете использовать подстановочные знаки, такие как '\ path \ to \ * doc?', Если часть пути, содержащая такой, является самой _last_ one; поэтому '\ path \ to \ any * \ items' не работает; – aschipfl

0

сделал несколько изменений, для того, чтобы правильно работать, вы должны создать папку Документы в C первых, добавьте его в библиотеку затем создать ссылка; в противном случае это не сработает, потому что сетевой диск не проиндексирован, и вы не можете добавить неиндексированный файл в библиотеку.

Вот полный рабочий код, большое спасибо, Дмитрий! Можете ли вы объяснить, что это за шаблон? Извините, я все еще получаю много команд cmd. Я понимаю, большинство из них для %%A и %%~fA частей :)

@echo off 
mkdir C:\Documents 
pause 
for /d %%A in (\\servername\homefolder\%username%\*documents) do (
    if exist "%%~fA" (
     rd C:\Documents 
     mklink /D C:\Documents "%%~fA" 
     goto :eof 
    ) 
) 
+0

'%% A' - это параметр цикла' for'. Вы можете, конечно, выбрать любую букву алфавита, отличную от '%% A'.Но есть [расширения параметров] (http://ss64.com/nt/syntax-args.html) и зарезервированы буквы a, d, f, n, p, s, t, x. Поэтому использование заглавной буквы также является хорошим способом избежать конфликтов '%% A', а не' %% a'. –

+0

BTW, 'if there" %% ~ fA "' не требуется. Циклы 'for/d' проходят через существующие каталоги. Я забыл удалить его. –

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