gpt4 book ai didi

batch-file - 通过批处理脚本将具有相对路径的文件列表写入文件

转载 作者:行者123 更新时间:2023-12-02 16:23:20 27 4
gpt4 key购买 nike

我想列出具有特定子文件夹的文件夹中的所有文件(具有相对路径),并将该列表写入文本文件。该文件夹是网络文件夹,因此我无法将其设置为当前目录。所有这些都是通过批处理脚本实现的。

就像这样:

文件夹结构:

\\OtherComputer\MyFiles\libs
--File1.dll
--File2.dll
\\OtherComputer\MyFiles\libs\Editor\
----File3.dll

我想生成一个包含以下文本的文件:

File1.dll
File2.dll
Editor\File3.dll

这就是我已经走了多远:

SET LibPath=\\OtherComputer\MyFiles\

break >"%LibPath%metadata"
for %%F in (%LibPath%*.*) do (
echo %%F>>"%LibPath%metadata"
)
for %%F in (%LibPath%Editor\*.*) do (
echo Editor\%%F>>"%LibPath%metadata"
)

但是这个解决方案写的是完整路径。我尝试这样做来删除路径:

set str=%%F:%LibPath%=%

但它似乎不能很好地在 for 循环内处理变量 SET%%F 变量。

这可能吗?不想为此编写 C# 可执行文件。

提前致谢!

最佳答案

尝试以下操作:

@echo off
setlocal enabledelayedexpansion

set "dir=\\OtherComputer\MyFiles\"

FOR /F "tokens=*" %%f IN ('dir /s /b /A-d "%dir%"') do (
set "full=%%f"
echo !full:*%dir%=!
)
  • setlocalenabledelayedexpansion 除了创建本地化环境之外,还打开变量的延迟扩展,这允许在 for 循环体中修改变量,并且与它们的修改值一起使用。 (请参阅帮助设置)。请注意,为了动态扩展变量,必须将其括在 ! 中,而不是 % 中;例如,!full! 而不是 %full%

    • 注意:启用延迟扩展的副作用是任何 ! 字符都会被解释为变量引用的一部分,从而可能导致不必要的删除 ! 字符。来自字符串,例如 echo hi! 中。要在启用延迟扩展时输出文字 !,请在不带引号的字符串中使用^^!,并使用 >^! 在双引号字符串中。此外,文字 ^ 字符。在双引号字符串中则必须表示为 ^^
  • dir/s/b/A-d "%dir%" 列出所有文件 - 并且仅列出文件,因为排除了带有 /A-d 的目录 - 在当前子树 (/s),仅作为路径 (b)。请注意,使用 /s 意味着输出完整路径。

  • set "full=%%f" 设置 aux。变量 full 到当前循环迭代中正在处理的绝对路径。

  • !full:*%dir%=! 然后使用前缀字符串替换从绝对路径中剥离输入目录的路径,留下所需的相对路径(再次参见 帮助设置)。

<小时/>

只是将此与 PowerShell (v3+) 解决方案进行对比,该解决方案展示了 PowerShell 比 cmd.exe 先进得多。:

$dir = '\\OtherComputer\MyFiles\'
(Get-ChildItem -File -Recurse $dir).FullName.replace($dir, '')

关于batch-file - 通过批处理脚本将具有相对路径的文件列表写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34371147/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com