Batch file 如何解析返回的系统变量%%d0,在不使用冒号字符的情况下自行返回并存储当前驱动器号

Batch file 如何解析返回的系统变量%%d0,在不使用冒号字符的情况下自行返回并存储当前驱动器号,batch-file,Batch File,在批处理文件中,以下命令返回驱动器号和冒号 set current_Drive=%~d0 echo %current_Drive% 我需要从%current\u Drive%中去掉冒号,以便可以使用变量驱动器号本身(“C”而不是“C:\”)在批处理中创建文本文件,例如- dir/s > "Myfiles on Drive %current_Drive% .txt" var%current\u Drive%中包含的冒号(:)在文件名中不是合法字符,需要去掉 我尝试修改以下示例: 该命令有

在批处理文件中,以下命令返回驱动器号和冒号

set current_Drive=%~d0
echo %current_Drive%
我需要从
%current\u Drive%
中去掉冒号,以便可以使用变量驱动器号本身(“C”而不是“C:\”)在批处理中创建文本文件,例如-

dir/s > "Myfiles on Drive %current_Drive% .txt"
var
%current\u Drive%
中包含的冒号(:)在文件名中不是合法字符,需要去掉

我尝试修改以下示例:

该命令有一些有用的字符串操作功能,如或

要仅获取变量的第一个字符,请使用

echo %current_Drive:~0,1%
:~0,1
中,
~
表示“我想要一个子字符串”;
0
表示“跳过
0
字符”;
1
表示“从这里取
1
字符”

注意:这仅适用于环境变量
%var%
。它不适用于
%0
for
变量
%a
-您需要先将它们分配给“普通”变量

您还可以使用
echo%current\u Drive::\=%
删除不需要的部分
:\
(不使用任何内容替换
:\
),但我更喜欢第一种方法

另一种方法(对于这项任务来说,完全是过火了;只是为了完整):
使用
for/f
循环将字符串按冒号拆分:

for /f "tokens=1 delims=:" %%a in ("%current_Drive%") do echo %%a
优点:您不必知道子字符串的长度,它包含从字符串开始到delimeter的所有内容。

该命令有一些有用的字符串操作功能,如或

要仅获取变量的第一个字符,请使用

echo %current_Drive:~0,1%
:~0,1
中,
~
表示“我想要一个子字符串”;
0
表示“跳过
0
字符”;
1
表示“从这里取
1
字符”

注意:这仅适用于环境变量
%var%
。它不适用于
%0
for
变量
%a
-您需要先将它们分配给“普通”变量

您还可以使用
echo%current\u Drive::\=%
删除不需要的部分
:\
(不使用任何内容替换
:\
),但我更喜欢第一种方法

另一种方法(对于这项任务来说,完全是过火了;只是为了完整):
使用
for/f
循环将字符串按冒号拆分:

for /f "tokens=1 delims=:" %%a in ("%current_Drive%") do echo %%a

优点:您不必知道子字符串的长度,它需要从字符串开始到delimeter的所有信息。

echo%current\u Drive:~0,1%
帮助集和
帮助中有文档。非常有用,谢谢,还解决了另一个问题。该语法还用于回显存储在windows批处理文件局部变量类型中的字符串(左、中、右)——例如——设置_StringVar=%“abcdefg”回显%tempvar:~4,2%@Stephan请使用您的注释回答。让我们尽量减少未回答的问题@JosefZ我的意见是,由于SO上的批处理文件有很多子字符串问题,请将其标记为重复(然后删除它[糟糕的重复]),而不是保留它。
echo%current\u Drive:~0,1%
帮助集中有文档
帮助
。非常有用,谢谢,还解决了另一个问题。该语法还用于回显存储在windows批处理文件局部变量类型中的字符串(左、中、右)——例如——设置_StringVar=%“abcdefg”回显%tempvar:~4,2%@Stephan请使用您的注释回答。让我们尽量减少未回答的问题@JosefZ我的意见是,由于在SO上批处理文件有很多子字符串问题,所以将其标记为重复(然后删除它[糟糕的重复]),而不是保留它。