Показать полную графическую версию : [решено] Как убрать сокращение имени папки в пути к файлу?
вот часть кода
@echo off
setlocal enableextensions enabledelayedexpansion
SET f=%~dp0
...
echo Расположение: "%f%" >> "%f%body.txt"
В итоге зачастую в файл записывается так: Расположение: E:\CONSFL~1\
А надо чтобы полностью имя папки отображалось.
Насколько «зачастую»? Есть какая-либо повторяемость?
Суть в том, что это, как я полагаю, может быть связано с тем, что:
пакетный файл запускается непосредственно из содержащей его папки;
уже до начала исполнения пакетного файла текущим каталогом является именно имя в формате 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>
Iska, скорей всего каждый раз, если батник запускается автоматически (настроено в планировщике заданий)
пакетный файл запускается непосредственно из содержащей его папки; »
да, так оно и есть.
И что никак не исправить? перемещать батник нельзя
уже до начала исполнения пакетного файла текущим каталогом является именно имя в формате 8.3. »
а что это за формат 8.3? и как узнать?
P.S.: имя папки в таком формате записывается на всех пока что настроенных компьютерах (win 7, xp, server 2003 и не важно x32 или х64). Но если тестирую на своем win 8.1 x64 и xp x32 (даже если через планировщик заданий запускаю), то имя полностью отображается. файловая система везде NTFS
настроено в планировщике заданий »
Покажите скриншот первой вкладки задания.
а что это за формат 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 (даже если через планировщик заданий запускаю), то имя полностью отображается. »
Аналогично — тоже покажите скриншот первой вкладки задания. Попробуем сравнить «нехорошо» и «хорошо».
Iska, на win 8.1 x64 и xp x32. Но на остальных всё точно также настраивал (сейчас к ним доступа нет)
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%».
сейчас к ним доступа нет »
Подождём.
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 строк кода
Вот примеры сокращения имени папки на разных компах »
V!RTuE, какой путь указан в «Рабочей папке» на этих машинах? «Длинный» или «короткий»? Если не указан путь в «Рабочей папке», как указан путь к самому пакетному файлу?
P.S. Глубоко спрятано в новых ОС:
http://i.imgur.com/JCDDR64.png
V!RTuE, какой путь указан в «Рабочей папке» на этих машинах? «Длинный» или «короткий»? Если не указан путь в «Рабочей папке», как указан путь к самому пакетному файлу? »
пока сказать не могу. завтра только смогу подробно посмотреть на некоторых компах. может что еще надо глянуть? чтобы по максимуму собрать инфу.
V!RTuE, пока других идей нет.
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
V!RTuE, моё предположение про рабочую папку не подтверждается.
Но я как-то не понял: в задании указан пакетный файл, а приходит Вам путь, указывающий на исполняемый файл. Придётся-таки Вам показывать Ваш полный код.
Но я как-то не понял: в задании указан пакетный файл, а приходит Вам путь, указывающий на исполняемый файл. Придётся-таки Вам показывать Ваш полный код. »
потому что в коде записано так
@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"
это часть кода, которая поясняет что к чему. полную версию батника отправлю сейчас отправил в лс на почту
V!RTuE, ну, так вот и ответ, как я понимаю:
if "%1_"=="_" (START /MIN CMD.EXE /C "%~s0" any_word & EXIT) »
ну, так вот и ответ, как я понимаю: »
а если заменить "%~s0" на %0 или "%~0" или "%~f0", то должно полностью имя отображаться? и вообще что значит именно эта буква s?
А дальше Вы и получаете в:
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 расширяется до размера файла
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 таких проблем не возникает?
if "%~1" == "" (start "" /min "%comspec%" /c "%~f0" any_word & exit /b)
P.S.: Тогда почему на моем компе с win 8.1 и виртуалке с win xp sp3 таких проблем не возникает? »
Возможно там у Вас совпадает короткое и длинное имя папки, содержащей командный файл. Проверьте.
Возможно там у Вас совпадает короткое и длинное имя папки, содержащей командный файл. Проверьте. »
расскажите поподробнее как это сделать? и с помощью чего?
Разобрался. Действительно короткое имя совпадало. Теперь экспериментирую с этой строкой
if "%~1" == "" (start "" /min "%comspec%" /c "%~f0" any_word & exit /b)
пока не хочет в таком виде запускаться батник, если есть пробелы в пути к файлу. Точнее запускается, но до конца не выполняется. разбираюсь где у меня в коде ошибка
Лично мне проще всего смотреть посредством 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.