Letra da unidade do arquivo fornecido no lote do Windows

3

Estou escrevendo um script onde obterei um nome de arquivo como parâmetro. O arquivo será absoluto. (Idealmente, a solução também suportaria arquivos relativos, mas eu posso viver com somente absoluto). Não se sabe se o arquivo já existe.

Eu quero pegar a letra da unidade do arquivo.

Exemplo:

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

resultado esperado:

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

Contexto: quero escrever um script que faça alguma cópia de arquivo. Mas o arquivo pode aparecer no destino apenas de uma vez. Assim que for criado, ele já deve estar completo. Por isso, quero escrever um script que copie o arquivo para TARGET_DRIVE\tmp e mova-o para o destino.

Eu pensei em passar a letra do Drive como um terceiro argumento. Mas isso parece complicado.

    
por Angelo Fuchs 08.03.2016 / 15:29

1 resposta

1

Eu quero pegar a letra da unidade do arquivo no segundo argumento

Use %~d2 .

myScript.bat:

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

Exemplo de saída:

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>

Extensões de Parâmetro

When an argument is used to supply a filename then the following extended syntax can be applied:

we are using the variable %1 (but this works for any parameter)

%~f1 Expand %1 to a Fully qualified path name - C:\utils\MyFile.txt

%~d1 Expand %1 to a Drive letter only - C:

%~p1 Expand %1 to a Path only e.g. \utils\ this includes a trailing \ which will be interpreted as an escape character by some commands.

%~n1 Expand %1 to a file Name without file extension C:\utils\MyFile or if only a path is present (with no trailing backslash) - the last folder in that path.

%~x1 Expand %1 to a file eXtension only - .txt

%~s1 Change the meaning of f, n, s and x to reference the Short 8.3 name (if it exists.)

%~1 Expand %1 removing any surrounding quotes (")

%~a1 Display the file attributes of %1

%~t1 Display the date/time of %1

%~z1 Display the file size of %1

%~$PATH:1 Search the PATH environment variable and expand %1 to the fully qualified name of the first match found.

The modifiers above can be combined:

%~dp1 Expand %1 to a drive letter and path only

%~sp1 Expand %1 to a path shortened to 8.3 characters

%~nx2 Expand %2 to a file name and extension only

Fonte parâmetros

Leitura Adicional

por 08.03.2016 / 15:49