如何仅使用批处理文件中的变量提取字符串的一部分?

Posted

技术标签:

【中文标题】如何仅使用批处理文件中的变量提取字符串的一部分?【英文标题】:How to extract part of a string using only variables in a batch file? 【发布时间】:2020-06-13 10:00:51 【问题描述】:

也许我试图把事情过分简单化。无法删除要用作路径名的变量的一部分。目标是将多个 Windows 配置文件上的文件夹(和子文件夹)中的所有内容转移到单个配置文件中。

我可以复制所有内容,但不能告诉它放在哪里。也碰巧第一次尝试使用 robocopy。我想在桌面上创建一个文件夹,命名为设备上每个用户的用户名,然后复制所有内容。

for /d %%a in (C:\Users\*) do (

     set var=%%a
     var=$var#*s/ 

mkdir "%USERPROFILE%\Desktop\Backup\%var%\folderx"

xcopy "%%a\Desktop\folderx" "%USERPROFILE%\Desktop\Backup\%var%\folderx" /E /Y
)

注意事项:

    不确定删除 C:\Users\ 的最佳方法,所以我只保留用户名作为变量(假设 var 是命令) 我正在尝试这样做,而不必将字符串写入文件并读回 假设备份文件夹已经创建

【问题讨论】:

打开command prompt,运行for /? 并阅读输出帮助。 %~nxI 引用当前分配给循环变量I 的文件/文件夹字符串的最后一个反斜杠之后的字符串,在您的情况下,这将是%HomeDrive%\Users 中文件夹的名称。在您的情况下,您必须在批处理文件中使用 %%~nxa 来引用目录名称,并且您在阅读 FOR 的帮助并查看此修饰符字符串后知道为什么 aA 是循环变量没有好的选择。循环变量区分大小写,但修饰符不区分大小写。 【参考方案1】:

仍然不确定如何正确剥离它。只是发现首先不包括驱动器更有效。

    List item dir 获取名称的裸命令 将 C: 更改为用户变量,以防安装在不同的字母上

FOR /f "tokens=*" %%a in ('dir /b /a:d-s-l "%SystemDrive%\Users"') DO (

    mkdir "%USERPROFILE%\Desktop\Backup\%%a\folderx"
    mkdir "%USERPROFILE%\Desktop\Backup\%%\foldery"

    xcopy "%SystemDrive%\Users\%%a\Desktop\folderx" "%USERPROFILE%\Desktop\Backup\%%a\folderx" /e /y
    xcopy "%SystemDrive%\Users\%%a\Desktop\foldery" "%USERPROFILE%\Desktop\Backup\%%a\foldery" /e /y

)

严格来说,不是答案,而是解决根本问题的更清洁的方法。仍然不确定如何正确剥离信息。

【讨论】:

%HOMEDRIVE% 通常是Users 文件夹所在的驱动器,%SystemDrive% 通常是Windows 文件夹所在的驱动器。这两个文件夹通常位于同一个驱动器上,但并非总是如此。 我建议使用 "eol=| delims=" 而不是 "tokens=*" 以确保真正处理正确的所有由 DIR 输出的文件夹,包括以一个或多个空格或分号 (在 0 个或多个前导空格之后)。 "tokens=*" 导致首先从捕获的行中删除所有前导/空格制表符,如果剩余的字符串以分号开头,则忽略该行。 "eol=| delims=" 通过定义一个空的分隔符列表来关闭行拆分行为,并将行尾字符重新定义为一个竖线,该竖线没有文件/文件夹名称可以包含,因此不再被忽略。 最好在两个 XCOPY 复制命令行上指定目标文件夹,并在结束 \ 结束之前关闭 " 以使其 100% 清楚 XCOPY 目标是目录而不是文件。那么这两个mkdir 根本就不需要了,因为 XCOPY 会在复制文件之前自动创建目标目录。顺便说一句:第二个mkdir%% 之后错过了循环变量a。在命令提示符窗口中运行 robocopy /? 以获取有关此可执行文件的帮助,现在应该使用它而不是 xcopy 可执行文件。

以上是关于如何仅使用批处理文件中的变量提取字符串的一部分?的主要内容,如果未能解决你的问题,请参考以下文章

如何从字典中提取仅打印某些变量python

如何从 Bash 中的路径字符串中删除文件后缀和路径部分?

如何从repo文件中仅提取已启用的存储库?

如何提取firebase中的所有孩子,其中某些部分等于某个字符串

如何从 SubRip .srt 文件中仅提取文本(剥离时间码)?

如何用批处理命令删除一批文件中的空格字符.