3

Я пишу сценарий, в котором я получу имя файла в качестве параметра. Файл будет абсолютным. (В идеале решение будет поддерживать относительные файлы, но я могу жить только с абсолютным). Это неизвестно, если файл уже существует.

Я хочу получить букву диска с файлом.

Пример:

myScript.bat C:\exampleFolder\somefile.txt D:\someOtherFolder\differentfile.txt

myScript.bat:

echo First argument: %1
echo Second argument: %2
REM Its the next line I have trouble with.
echo Drive letter of second argument: %MAGIC%2

ожидаемый результат:

First argument: C:\exampleFolder\somefile.txt
Second argument: D:\someOtherFolder\differentfile.txt
Drive letter of second argument: D:

Контекст: я хочу написать скрипт, который выполняет копирование некоторых файлов. Но файл может появиться в месте назначения только сразу. Как только он создан, он уже должен быть завершен. Поэтому я хочу написать скрипт, который копирует файл в TARGET_DRIVE\tmp и затем перемещает его в место назначения.

Я думал о передаче буквы диска в качестве третьего аргумента. Но это кажется громоздким.

1 ответ1

1

Я хочу получить букву диска файла во 2-м аргументе

Используйте %~d2 .

myScript.bat:

@echo off
echo First argument: %1
echo Second argument: %2
echo Drive letter of second argument: %~d2

Пример вывода:

F:\test>myScript C:\exampleFolder\somefile.txt D:\someOtherFolder\differentfile.txt
First argument: C:\exampleFolder\somefile.txt
Second argument: D:\someOtherFolder\differentfile.txt
Drive letter of second argument: D:

F:\test>

Расширения параметров

Когда аргумент используется для указания имени файла, может применяться следующий расширенный синтаксис:

мы используем переменную% 1 (но это работает для любого параметра)

% ~ f1 Разверните% 1 до полного имени пути - C:\utils\MyFile.txt

% ~ d1 Развернуть% 1 только до буквы диска - C:

% ~ p1 Развернуть% 1 только до пути, например, \utils\, включая завершающий символ \, который будет интерпретирован как управляющий символ некоторыми командами.

% ~ n1 Разверните% 1 до имени файла без расширения файла C:\utils\MyFile или, если присутствует только путь (без обратной косой черты) - последняя папка в этом пути.

% ~ x1 Развернуть% 1 только до файла eXtension - .txt

% ~ s1 Измените значения f, n, s и x для ссылки на короткое имя 8.3 (если оно существует).

% ~ 1 Расширить% 1, удалив все окружающие кавычки (")

% ~ a1 Показать атрибуты файла% 1

% ~ t1 Показать дату / время% 1

% ~ z1 Показать размер файла% 1

% ~ $ PATH:1 Найдите переменную среды PATH и разверните% 1 до полного имени первого найденного соответствия.

Модификаторы выше могут быть объединены:

% ~ dp1 Развернуть% 1 только до буквы диска и пути

% ~ sp1 Расширить% 1 до пути, сокращенного до 8,3 символа

% ~ nx2 Развернуть% 2 только до имени файла и расширения

Исходные параметры


Дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .