Windows批处理中给定文件的驱动器号

Windows批处理中给定文件的驱动器号

我正在编写一个脚本,其中我将获取一个文件名作为参数。该文件将是绝对文件。(理想情况下,解决方案也支持相对文件,但我只能接受绝对文件)。不知道该文件是否已经存在。

我想要获取文件的驱动器号。

例子:

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

我的脚本.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

我想在第二个参数中获取文件的驱动器号

使用%~d2

我的脚本.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 扩展为文件扩展名 - .txt

%~s1 更改 f、n、s 和 x 的含义以引用 Short 8.3 名称(如果存在)。

%~1 展开 %1 并删除所有引号 (")

%~a1 显示 %1 的文件属性

%~t1 显示 %1 的日期/时间

%~z1 显示 %1 的文件大小

%~$PATH:1 搜索 PATH 环境变量并将 %1 扩展为找到的第一个匹配项的完全限定名称。

上面的修饰符可以组合使用:

%~dp1 将 %1 仅扩展为驱动器号和路径

%~sp1 将 %1 扩展为缩短为 8.3 个字符的路径

%~nx2 将 %2 仅扩展为文件名和扩展名

来源参数


进一步阅读

相关内容