Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как убрать сокращение имени папки в пути к файлу? (http://forum.oszone.net/showthread.php?t=287629)

V!RTuE 07-09-2014 22:54 2399765

Как убрать сокращение имени папки в пути к файлу?
 
вот часть кода
Код:

@echo off
setlocal enableextensions enabledelayedexpansion
SET f=%~dp0
...
echo Расположение: "%f%" >> "%f%body.txt"

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

Iska 07-09-2014 22:58 2399769

Насколько «зачастую»? Есть какая-либо повторяемость?

Суть в том, что это, как я полагаю, может быть связано с тем, что:
  • пакетный файл запускается непосредственно из содержащей его папки;
  • уже до начала исполнения пакетного файла текущим каталогом является именно имя в формате 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 2399770

Iska, скорей всего каждый раз, если батник запускается автоматически (настроено в планировщике заданий)

Цитата:

Цитата Iska
пакетный файл запускается непосредственно из содержащей его папки; »

да, так оно и есть.
И что никак не исправить? перемещать батник нельзя

Цитата:

Цитата 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 2399787

Цитата:

Цитата V!RTuE
настроено в планировщике заданий »

Покажите скриншот первой вкладки задания.

Цитата:

Цитата V!RTuE
а что это за формат 8.3? »

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

8.3 — Википедия
8.3 filename - Wikipedia, the free encyclopedia (более качественный материал)
How Windows Generates 8.3 File Names from Long File Names

Цитата:

Цитата V!RTuE
Но если тестирую на своем win 8.1 x64 и xp x32 (даже если через планировщик заданий запускаю), то имя полностью отображается. »

Аналогично — тоже покажите скриншот первой вкладки задания. Попробуем сравнить «нехорошо» и «хорошо».

V!RTuE 07-09-2014 23:53 2399790

Вложений: 2
Iska, на win 8.1 x64 и xp x32. Но на остальных всё точно также настраивал (сейчас к ним доступа нет)

Iska 08-09-2014 07:39 2399852

V!RTuE, по поводу 1) не скажу — то ли не видно там путей, то ли я просто плохо навскидку представляю вид вкладок задания в новых системах, надо смотреть.

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

Цитата:

Цитата V!RTuE
сейчас к ним доступа нет »

Подождём.

V!RTuE 08-09-2014 14:33 2400032

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 2400046

Цитата:

Цитата V!RTuE
Вот примеры сокращения имени папки на разных компах »

V!RTuE, какой путь указан в «Рабочей папке» на этих машинах? «Длинный» или «короткий»? Если не указан путь в «Рабочей папке», как указан путь к самому пакетному файлу?

P.S. Глубоко спрятано в новых ОС:

V!RTuE 08-09-2014 15:19 2400047

Цитата:

Цитата Iska
V!RTuE, какой путь указан в «Рабочей папке» на этих машинах? «Длинный» или «короткий»? Если не указан путь в «Рабочей папке», как указан путь к самому пакетному файлу? »

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

Iska 08-09-2014 15:22 2400048

V!RTuE, пока других идей нет.

V!RTuE 08-09-2014 18:23 2400133

Iska, вот пример http://photo.qip.ru/photo/virtue-x/4...108348627.jpg? http://photo.qip.ru/photo/virtue-x/4...108348614.jpg?
Операционная система: Windows 7 Professional (x64)
в отчете мне приходит:
Код:

Расположение К+: D:\CONSUL~1\cons.exe

Iska 08-09-2014 19:20 2400144

V!RTuE, моё предположение про рабочую папку не подтверждается.

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

V!RTuE 08-09-2014 19:24 2400148

Цитата:

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

потому что в коде записано так
Код:

@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 2400155

V!RTuE, ну, так вот и ответ, как я понимаю:
Цитата:

Цитата V!RTuE
Код:

if "%1_"=="_" (START /MIN CMD.EXE /C "%~s0" any_word & EXIT)
»


V!RTuE 08-09-2014 20:01 2400157

Цитата:

Цитата Iska
ну, так вот и ответ, как я понимаю: »

а если заменить "%~s0" на %0 или "%~0" или "%~f0", то должно полностью имя отображаться? и вообще что значит именно эта буква s?

Iska 08-09-2014 20:01 2400158

А дальше Вы и получаете в:
Цитата:

Цитата V!RTuE
Код:

SET f=%~dp0
»

короткое имя, поскольку повторный вызов пакетного файла идёт по указанному Вами короткому имени:


Цитата:

Цитата V!RTuE
а если заменить "%~s0" на %0 или "%~0" или "%~f0", то должно полностью имя отображаться? »

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

Цитата:

Цитата V!RTuE
и вообще что значит именно эта буква s? »

call /?
Операции подстановки параметров пакетного файла (%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 2400161

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 2400163

Код:

if "%~1" == "" (start "" /min "%comspec%" /c "%~f0" any_word & exit /b)
Цитата:

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

Возможно там у Вас совпадает короткое и длинное имя папки, содержащей командный файл. Проверьте.

V!RTuE 08-09-2014 20:19 2400165

Цитата:

Цитата Iska
Возможно там у Вас совпадает короткое и длинное имя папки, содержащей командный файл. Проверьте. »

расскажите поподробнее как это сделать? и с помощью чего?
Разобрался. Действительно короткое имя совпадало. Теперь экспериментирую с этой строкой
Код:

if "%~1" == "" (start "" /min "%comspec%" /c "%~f0" any_word & exit /b)
пока не хочет в таком виде запускаться батник, если есть пробелы в пути к файлу. Точнее запускается, но до конца не выполняется. разбираюсь где у меня в коде ошибка

Iska 08-09-2014 20:48 2400175

Лично мне проще всего смотреть посредством Far Manager'а, получая отображение коротких имён по «Ctrl-N»:

А Вы можете опробовать «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      Мама мыла раму


V!RTuE 08-09-2014 21:04 2400182

Iska, в общем теперь всё работает. Эти все варианты рабочие (имя не сокращает):
Код:

if "%~1" == "" (start "" /min "%comspec%" /c "%~f0" any_word & exit /b)
if "%1_"=="_" (START /MIN CMD.EXE /C %0 any_word & EXIT)
if "%1_"=="_" (START /MIN CMD.EXE /C "%~0" any_word & EXIT)
if "%1_"=="_" (START /MIN CMD.EXE /C "%~f0" any_word & EXIT)

этот нерабочий (имя сокращает):
Код:

if "%1_"=="_" (START /MIN CMD.EXE /C "%~s0" any_word & EXIT)
Еще можете объяснить почему рекомендуете использовать такой код:
Код:

if "%~1" == "" (start "" /min "%comspec%" /c "%~f0" any_word & exit /b)
а не этот, например:
Код:

if "%1_"=="_" (START /MIN CMD.EXE /C "%~f0" any_word & EXIT)

4QSN1K 20-04-2017 00:27 2730832

Ребят, а как мне в bat или cmd сократить имя учетной записи?
То есть, чтоб команда была постоянной, независимо от машины.
Код:

reg import C:\Users\MJ\Desktop\4.reg

V!RTuE 20-04-2017 00:40 2730833

Цитата:

Цитата 4QSN1K
а как мне в bat или cmd сократить имя учетной записи? »

%username% вместо MJ

или %userprofile% вместо C:\Users\MJ

Iska 20-04-2017 01:02 2730836

Цитата:

Цитата V!RTuE
%username% вместо MJ
или %userprofile% вместо C:\Users\MJ »

Без «или». Только второе. Имя пользователя может отличаться от имени каталога профиля.

Serguei Kouzmine 24-04-2017 01:36 2731880

можно так напр.

for /F "tokens=*" %. in ('powershell "(get-item -path 'c:\PROGRA~1\WI7A8C~1').fullname"') do @echo %.
C:\Program Files\Windows Multimedia Platform

- подставьте %~dp0 и замените на двойные % для bat файла


Время: 09:29.

Время: 09:29.
© OSzone.net 2001-