@echo off
del 0List.txt 2 > nul
for /F "delims=" %%I in ('dir "D:\MyFolder\Ready\*.txt" /A-D /B /S 2^>nul') do echo %%~fI>>0List.txt
使用此代码,我在文件夹 (Ready) 中列出了 TXT 文件及其子文件夹。它使用文件列表创建 txt。只是,我想最终摆脱D;\直到Ready。所以
D:\MyFolder\Ready\file1.txt
D:\MyFolder\Ready\file2.txt
D:\MyFolder\Ready\My Sub Folder\file434.txt
应该在我创建的列表中进行修剪
Ready\file1.txt
Ready\file2.txt
Ready\My Sub Folder\file434.txt
我查看了一些问题,但无法将其应用到上面的代码中,如果有人可以告诉我在哪里添加以删除路径的第一部分,我将不胜感激。
您是否正在寻找这样的东西,它只保留最后一片叶子
%BaseDirectory%
:在我们开始之前,请注意这一行
SETLOCAL ENABLEDELAYEDEXPANSION
。该行建立了一个“本地环境”,这意味着当脚本结束(或
ENDLOCAL
执行语句)时,对环境的任何更改都将被丢弃。其效果是运行环境不会被同一会话中其他作业所做的更改“污染”。因此,标准做法是
setlocal
在批处理文件的开头、紧接在@echo off
是
enabledelayedexpansion
可选的,但这是打开delayedexpansion
语法的唯一方法,其中!var!
是变量的当前code block
值,因为它可以在(带括号的语句序列)中更改。请参阅Stephan 的 DELAYEDEXPANSION 链接以获取文档。您
del 0List.txt 2 > nul
没有做您似乎想做的事情。它会删除文件0List.txt
,并且2
您需要将错误消息重定向到位箱2
之前。>
批量子字符串化只能对普通变量进行,而不是
metavariables
像%%I
or 那样%1
,因此需要先将其分配给标准变量,然后才能对其进行操作。语法
SET "var=value"
(其中 value 可能为空;在这种情况下var
变为undefined)用于确保源行上的任何杂散尾随空格不包含在分配的值中。然后是第二个字符中
echo
的值(请注意,批处理中的字符编号从“字符#0”开始,与当前内容连接(每次循环都会更改) - 直到 的内容的字符串除外。请参阅提示获取文档 - 或数千个有关 SO 的示例。cutstring
name
name
cutstring
set /?
我已将输出显示在控制台上。