PDA

Показать полную графическую версию : [решено] Как убрать сокращение имени папки в пути к файлу?


Страниц : [1] 2

V!RTuE
07-09-2014, 22:54
вот часть кода
@echo off
setlocal enableextensions enabledelayedexpansion
SET f=%~dp0
...
echo Расположение: "%f%" >> "%f%body.txt"

В итоге зачастую в файл записывается так: Расположение: E:\CONSFL~1\
А надо чтобы полностью имя папки отображалось.

Iska
07-09-2014, 22:58
Насколько «зачастую»? Есть какая-либо повторяемость?

Суть в том, что это, как я полагаю, может быть связано с тем, что:
пакетный файл запускается непосредственно из содержащей его папки;
уже до начала исполнения пакетного файла текущим каталогом является именно имя в формате 8.3.

Например:
E:\Песочница\0397>type 0005.cmd
@echo off
setlocal enableextensions enabledelayedexpansion

echo [%~dp0]

endlocal
exit /b 0

E:\Песочница\0397>0005.cmd
[E:\Песочница\0397\]

E:\Песочница\0397>cd E:\DCB3~1\0397

E:\DCB3~1\0397>0005.cmd
[E:\DCB3~1\0397\]

E:\DCB3~1\0397>

V!RTuE
07-09-2014, 23:02
Iska, скорей всего каждый раз, если батник запускается автоматически (настроено в планировщике заданий)

пакетный файл запускается непосредственно из содержащей его папки; »
да, так оно и есть.
И что никак не исправить? перемещать батник нельзя

уже до начала исполнения пакетного файла текущим каталогом является именно имя в формате 8.3. »
а что это за формат 8.3? и как узнать?

P.S.: имя папки в таком формате записывается на всех пока что настроенных компьютерах (win 7, xp, server 2003 и не важно x32 или х64). Но если тестирую на своем win 8.1 x64 и xp x32 (даже если через планировщик заданий запускаю), то имя полностью отображается. файловая система везде NTFS

Iska
07-09-2014, 23:48
настроено в планировщике заданий »
Покажите скриншот первой вкладки задания.

а что это за формат 8.3? »
Это то, что Вы видите у себя «зачастую». Аналогично «dir /x».

8.3 — Википедия (https://ru.wikipedia.org/wiki/8.3)
8.3 filename - Wikipedia, the free encyclopedia (http://en.wikipedia.org/wiki/8.3_filename) (более качественный материал)
How Windows Generates 8.3 File Names from Long File Names (http://support.microsoft.com/kb/142982/en-us)

Но если тестирую на своем win 8.1 x64 и xp x32 (даже если через планировщик заданий запускаю), то имя полностью отображается. »
Аналогично — тоже покажите скриншот первой вкладки задания. Попробуем сравнить «нехорошо» и «хорошо».

V!RTuE
07-09-2014, 23:53
Iska, на win 8.1 x64 и xp x32. Но на остальных всё точно также настраивал (сейчас к ним доступа нет)

Iska
08-09-2014, 07:39
V!RTuE, по поводу 1) не скажу — то ли не видно там путей, то ли я просто плохо навскидку представляю вид вкладок задания в новых системах, надо смотреть.

По поводу 2) — там всё интереснее. Приведите полное содержание поля «Выпонить» текстом, на скриншоте не видно. Далее: Рабочей папкой (текущим каталогом) для задания указан сетевой каталог, UNC. И, поскольку содержимым задания является пакетный файл — то, если Вы принудительно не разрешали использование UNC-путей в качестве текущего каталога (Cmd.exe does not support UNC names as the current directory (http://support.microsoft.com/kb/156276/en-us)), интерпретатор команд «cmd.exe» должен автоматически сделать текущим каталогом для пакетного файла каталог «%SystemRoot%».

сейчас к ним доступа нет »
Подождём.

V!RTuE
08-09-2014, 14:33
Iska, на первом скрине путь e:\Консультант Плюс\
на втором (можно догадаться, если посмотреть на рабочую папку) \\VBOXSVR\e_drive\Консультант Плюс\ (это на виртуальной машине тестировал). А вообще на всех компах путь стандартный c:\ConsultantPlus\ (может на некоторых меняться диск на d или название папки другое. Но даже если в пути нет пробелов, то сокращает имя папки). По поводу UNC-путей, то батник написан так, что для него не важно откуда запускается - свою работу выполняет всегда.

Вот примеры сокращения имени папки на разных компах (мне на почту приходят отчеты)
Расположение К+: D:\CONSUL~1\CONS.exe
Расположение К+: C:\CONSUL~1\CONS.exe
Расположение К+: S:\Shares_\CONSUL~1\
Расположение К+: C:\K_B2B4~1\CONS.exe (тут, кстати, имя папки по-русски К+)

ОС везде разные (xp, 7, win server 2003)
P.S.: могу весь батник выслать в лс (но не хочу в общий доступ пока что выкладывать). там ~500 строк кода

Iska
08-09-2014, 15:12
Вот примеры сокращения имени папки на разных компах »
V!RTuE, какой путь указан в «Рабочей папке» на этих машинах? «Длинный» или «короткий»? Если не указан путь в «Рабочей папке», как указан путь к самому пакетному файлу?

P.S. Глубоко спрятано в новых ОС:
http://i.imgur.com/JCDDR64.png

V!RTuE
08-09-2014, 15:19
V!RTuE, какой путь указан в «Рабочей папке» на этих машинах? «Длинный» или «короткий»? Если не указан путь в «Рабочей папке», как указан путь к самому пакетному файлу? »
пока сказать не могу. завтра только смогу подробно посмотреть на некоторых компах. может что еще надо глянуть? чтобы по максимуму собрать инфу.

Iska
08-09-2014, 15:22
V!RTuE, пока других идей нет.

V!RTuE
08-09-2014, 18:23
Iska, вот пример http://photo.qip.ru/photo/virtue-x/4298053/xlarge/108348627.jpg? http://photo.qip.ru/photo/virtue-x/4298053/xlarge/108348614.jpg?
Операционная система: Windows 7 Professional (x64)
в отчете мне приходит:
Расположение К+: D:\CONSUL~1\cons.exe

Iska
08-09-2014, 19:20
V!RTuE, моё предположение про рабочую папку не подтверждается.

Но я как-то не понял: в задании указан пакетный файл, а приходит Вам путь, указывающий на исполняемый файл. Придётся-таки Вам показывать Ваш полный код.

V!RTuE
08-09-2014, 19:24
Но я как-то не понял: в задании указан пакетный файл, а приходит Вам путь, указывающий на исполняемый файл. Придётся-таки Вам показывать Ваш полный код. »
потому что в коде записано так
@echo off
setlocal enableextensions enabledelayedexpansion
if "%1_"=="_" (START /MIN CMD.EXE /C "%~s0" any_word & EXIT)
COLOR 1A
SET f=%~dp0
IF EXIST "%f%CONS.EXE" FOR /f "tokens=*" %%i in ('dir /b "%f%CONS.exe"') do SET ZM=%%i
SET CONS0=%f%%ZM%
echo Расположение К+: %CONS0% >> "%f%body.txt"
это часть кода, которая поясняет что к чему. полную версию батника отправлю сейчас отправил в лс на почту

Iska
08-09-2014, 19:56
V!RTuE, ну, так вот и ответ, как я понимаю:
if "%1_"=="_" (START /MIN CMD.EXE /C "%~s0" any_word & EXIT) »

V!RTuE
08-09-2014, 20:01
ну, так вот и ответ, как я понимаю: »
а если заменить "%~s0" на %0 или "%~0" или "%~f0", то должно полностью имя отображаться? и вообще что значит именно эта буква s?

Iska
08-09-2014, 20:01
А дальше Вы и получаете в:
SET f=%~dp0 »
короткое имя, поскольку повторный вызов пакетного файла идёт по указанному Вами короткому имени:
http://i.imgur.com/seq3BdD.png

а если заменить "%~s0" на %0 или "%~0" или "%~f0", то должно полностью имя отображаться? »
Лучше «"%~f0"». Возможно, придётся поиграться с кавычками.

и вообще что значит именно эта буква s? »
Операции подстановки параметров пакетного файла (%n) также расширены.
Допускается применение следующих синтаксических конструкций:

%~1 - из переменной %1 удаляются обрамляющие кавычки (")
%~f1 - переменная %1 расширяется до полного имени файла
%~d1 - из переменной %1 выделяется только имя диска
%~p1 - из переменной %1 выделяется только путь к файлу
%~n1 - из переменной %1 выделяется только имя файла
%~x1 - из переменной %1 выделяется расширение имени файла
%~s1 - полученный путь содержит только короткие имена
%~a1 - переменная %1 расширяется до атрибутов файла
%~t1 - переменная %1 расширяется до даты /времени файла
%~z1 - переменная %1 расширяется до размера файла

V!RTuE
08-09-2014, 20:06
Iska, тогда мне что надо заменить? если только 2 строки поменяю, то это поможет?
if "%1_"=="_" (START /MIN CMD.EXE /C %0 any_word & EXIT)
и
echo Расположение К+: "%~dp0%ZM%" >> "%f%body.txt"

P.S.: Тогда почему на моем компе с win 8.1 и виртуалке с win xp sp3 таких проблем не возникает?

Iska
08-09-2014, 20:12
if "%~1" == "" (start "" /min "%comspec%" /c "%~f0" any_word & exit /b)

P.S.: Тогда почему на моем компе с win 8.1 и виртуалке с win xp sp3 таких проблем не возникает? »
Возможно там у Вас совпадает короткое и длинное имя папки, содержащей командный файл. Проверьте.

V!RTuE
08-09-2014, 20:19
Возможно там у Вас совпадает короткое и длинное имя папки, содержащей командный файл. Проверьте. »
расскажите поподробнее как это сделать? и с помощью чего?
Разобрался. Действительно короткое имя совпадало. Теперь экспериментирую с этой строкой
if "%~1" == "" (start "" /min "%comspec%" /c "%~f0" any_word & exit /b)
пока не хочет в таком виде запускаться батник, если есть пробелы в пути к файлу. Точнее запускается, но до конца не выполняется. разбираюсь где у меня в коде ошибка

Iska
08-09-2014, 20:48
Лично мне проще всего смотреть посредством Far Manager'а, получая отображение коротких имён по «Ctrl-N»:
http://i.imgur.com/DmNL8BV.png
А Вы можете опробовать «dir /x» в виде:
E:\Песочница\0397>dir /x /a:d

Содержимое папки E:\Песочница\0397

08.09.2014 20:37 <DIR> .
08.09.2014 20:37 <DIR> ..
08.09.2014 20:39 <DIR> 01D5~1 Мама мыла раму




© OSzone.net 2001-2012