使用EnableDelayedExpansion时,变量修饰符的语法正确

MangO_O

我希望能够执行%〜p以仅查看文件的路径。但是在循环中使用它时,我无法获得正确的语法(使用EnableDelayedExpansion)

这是我的代码:

@echo off
set "dir1=%TMP%\opt"
set "dir2=c:\opt"
set "empty="

setlocal EnableDelayedExpansion
for /f %%F in ('dir  /a:-d /s /b /r "%dir1%"') do (
  set "file_path=%%F"
  set "file_name=%%~nF"
  set "new_path=!file_path:%dir1%=%dir2%!"
  set "new_path=!new_path:!file_name!=%empty%" //This command is problematic
  echo !new_path!
)
endlocal

我有办法吗?

大卫·鲁曼

这是仅获取和替换文件路径的方法。

@echo off
setlocal EnableDelayedExpansion

set "dir1=%TMP%\opt"
set "dir2=c:\opt"

pushd "%dir1%" && for /f %%F in ('dir /a:-d /b /r /s') do (
    set "file_path=%%~dpF"
    set "new_path=!file_path:%dir1%=%dir2%!"
    echo !new_path!
) & popd

endlocal
exit /b 0

说明

主要的变化是对~dp变量使用了修饰符,这使得变量仅获取完整的文件路径而没有文件名。

您对dir1替换的用法是正确的,这是因为文件名替换不好。通过使用~dp修饰符,我们可以完全跳过文件名替换部分。

pushd只调用一次之前for循环开始设置工作目录。

演练:

  • 将工作目录设置为 dir1
  • 循环浏览该目录和子目录中的所有文件。
  • 对于每个文件,仅获取文件路径,C:\Path\opt\sub而不是C:\path\opt\sub\file.ext
  • 更换C:\path\optC:\opt
  • 显示结果。
  • popd会将工作目录恢复到pushd

这是for /?帮助文本中所有变量修饰符的列表

In addition, substitution of FOR variable references has been enhanced.
You can now use the following optional syntax:

%~I         - expands %I removing any surrounding quotes (")
%~fI        - expands %I to a fully qualified path name
%~dI        - expands %I to a drive letter only
%~pI        - expands %I to a path only
%~nI        - expands %I to a file name only
%~xI        - expands %I to a file extension only
%~sI        - expanded path contains short names only
%~aI        - expands %I to file attributes of file
%~tI        - expands %I to date/time of file
%~zI        - expands %I to size of file
%~$PATH:I   - searches the directories listed in the PATH
               environment variable and expands %I to the
               fully qualified name of the first one found.
               If the environment variable name is not
               defined or the file is not found by the
               search, then this modifier expands to the
               empty string

The modifiers can be combined to get compound results:

%~dpI       - expands %I to a drive letter and path only
%~nxI       - expands %I to a file name and extension only
%~fsI       - expands %I to a full path name with short names only
%~dp$PATH:I - searches the directories listed in the PATH
               environment variable for %I and expands to the
               drive letter and path of the first one found.
%~ftzaI     - expands %I to a DIR like output line

In the above examples %I and PATH can be replaced by other valid
values.  The %~ syntax is terminated by a valid FOR variable name.
Picking upper case variable names like %I makes it more readable and
avoids confusion with the modifiers, which are not case sensitive.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用修饰符添加变量以请求

来自分类Dev

使用Smarty修饰符

来自分类Dev

用可见性修饰符覆盖接口成员函数的正确语法是什么?

来自分类Dev

基于级别的变量修饰符

来自分类Dev

如何获得if修饰符的变量?

来自分类Dev

如何使用修饰符控制继承?

来自分类Dev

雄辩:在WhereIn中使用修饰符

来自分类Dev

防止使用静态修饰符

来自分类Dev

Prestashop 未使用修饰符方法

来自分类Dev

如何在TypeScript中使用修饰符正确包装构造函数

来自分类Dev

设置EnableDelayedExpansion时未正确评估变量

来自分类Dev

AtTask修饰符

来自分类Dev

在preg_match_all()中使用preg_quote()时使用未知修饰符

来自分类Dev

C#:使用getter / setter shortand时,可以混合使用函数访问修饰符吗?

来自分类Dev

在Java中开发通用修饰符的正确方法

来自分类Dev

更改签名的修饰符:正确记录附加参数

来自分类Dev

在声明案例类时是否应该使用final修饰符?

来自分类Dev

使用Core Data绑定编辑TextField时不会触发'.disabled'修饰符

来自分类Dev

使用clickable修饰符时Jetpack撰写编译错误

来自分类Dev

DB2:使用between子句时添加“ day”修饰符

来自分类Dev

创建EventHandler时使用static修饰符有什么意义?

来自分类Dev

字节码中丢失了变量“最终”修饰符?

来自分类Dev

条件“ if”修饰符中的Ruby变量赋值

来自分类Dev

正确替代Deprecated:preg_replace():不赞成使用/ e修饰符,使用preg_replace_callback吗?

来自分类Dev

当用户输入右侧时,通过s ///操作符安全地使用ee修饰符

来自分类Dev

使用gcc使用常量及其关联的修饰符

来自分类Dev

使用EnableDelayedExpansion时出现变量问题

来自分类Dev

使用EnableDelayedExpansion时出现变量问题

来自分类Dev

使用函数修饰符从集合中删除值

Related 相关文章

  1. 1

    使用修饰符添加变量以请求

  2. 2

    使用Smarty修饰符

  3. 3

    用可见性修饰符覆盖接口成员函数的正确语法是什么?

  4. 4

    基于级别的变量修饰符

  5. 5

    如何获得if修饰符的变量?

  6. 6

    如何使用修饰符控制继承?

  7. 7

    雄辩:在WhereIn中使用修饰符

  8. 8

    防止使用静态修饰符

  9. 9

    Prestashop 未使用修饰符方法

  10. 10

    如何在TypeScript中使用修饰符正确包装构造函数

  11. 11

    设置EnableDelayedExpansion时未正确评估变量

  12. 12

    AtTask修饰符

  13. 13

    在preg_match_all()中使用preg_quote()时使用未知修饰符

  14. 14

    C#:使用getter / setter shortand时,可以混合使用函数访问修饰符吗?

  15. 15

    在Java中开发通用修饰符的正确方法

  16. 16

    更改签名的修饰符:正确记录附加参数

  17. 17

    在声明案例类时是否应该使用final修饰符?

  18. 18

    使用Core Data绑定编辑TextField时不会触发'.disabled'修饰符

  19. 19

    使用clickable修饰符时Jetpack撰写编译错误

  20. 20

    DB2:使用between子句时添加“ day”修饰符

  21. 21

    创建EventHandler时使用static修饰符有什么意义?

  22. 22

    字节码中丢失了变量“最终”修饰符?

  23. 23

    条件“ if”修饰符中的Ruby变量赋值

  24. 24

    正确替代Deprecated:preg_replace():不赞成使用/ e修饰符,使用preg_replace_callback吗?

  25. 25

    当用户输入右侧时,通过s ///操作符安全地使用ee修饰符

  26. 26

    使用gcc使用常量及其关联的修饰符

  27. 27

    使用EnableDelayedExpansion时出现变量问题

  28. 28

    使用EnableDelayedExpansion时出现变量问题

  29. 29

    使用函数修饰符从集合中删除值

热门标签

归档