使用 cmd 在 txt 文件中使用 "forward slash" 保存文件目录
Saving files directory with "forward slash" in a txt file with cmd
正如主题所建议的,我需要将一些文件的一些目录从一个文件夹保存到一个 txt 文件中,得到“正斜杠”。
所以,我用这个简单的字符串制作了这个 .bat:
dir *.* /a/b/s > F:/TEST/FilesList.txt
我在 F:/TEST 中放置了一个名为“MEDIA_02.mp4”的文件
所以在 txt 中我得到:
F:\TEST\MEDIA_02.mp4
我需要得到的结果是:F:/TEST/MEDIA_02.mp4(带正斜杠)。
我不是程序员,但我了解一些事情,我需要得到“正斜杠”,因为我需要使用 unrealengine 读取一些目录,而这无法识别路径中的“反斜杠”。
非常感谢大家的支持!
更新:不需要通过 cmd 进行,它也可以是另一种语言。目标是获取带有正斜杠的目录,然后由 unrealengine 读取。
一种方法是在写入文件之前用 SOLIDUS '/' 替换 REVERSE SOLIDUS '\' 字符。如果您使用的是受支持的 Windows 系统,则可以使用 PowerShell。
powershell -NoLogo -NoProfile -Command ^
(Get-ChildItem -Filter '*.*').FullName ^| ForEach-Object { $_ -replace '\','/'} ^| Out-File './FilesList.txt' -Encoding ascii
我注意到问题中没有关于将输出限制为文件而不是目录的问题。对于 cmd
,可以用 DIR /A:-D
完成。如果您只需要 PowerShell 中的文件,如果您使用的是 PowerShell 5.1+,请使用 Get-ChildItem -File -Filter '*.*'
。
Mofi 在评论中回复了这个解决方案:
I suppose that each backslash in in each file name must be escaped
with one more backslash as that is the syntax for C++ strings. That
was my thought. So the solution should be (for /F "delims=" %%I in ('dir /B /S 2^>nul') do set "FileName=%%I" & setlocal EnableDelayedExpansion & echo !FileName:\=\!& endlocal)>F:\TEST\FilesList.txt
to have the file and directory names
with two backslashes per \
in the text file. I recommend to use /A-D
instead of just /A
to exclude directories.
所以,完整的字符串是:
@echo off
(for /F "delims=" %%I in ('dir /B /S 2^>nul') do set "FileName=%%I" & setlocal EnableDelayedExpansion & echo !FileName:\=/!& endlocal)>F:\FilesList.txt
.bat读取所在文件夹中的文件,它获取路径并将其保存在.txt“F:\Fileslist.txt”中,而不是保存它使用 "\"
它保存它 "/"
.
再次感谢Mofi的解答!
正如主题所建议的,我需要将一些文件的一些目录从一个文件夹保存到一个 txt 文件中,得到“正斜杠”。
所以,我用这个简单的字符串制作了这个 .bat:
dir *.* /a/b/s > F:/TEST/FilesList.txt
我在 F:/TEST 中放置了一个名为“MEDIA_02.mp4”的文件
所以在 txt 中我得到:
F:\TEST\MEDIA_02.mp4
我需要得到的结果是:F:/TEST/MEDIA_02.mp4(带正斜杠)。
我不是程序员,但我了解一些事情,我需要得到“正斜杠”,因为我需要使用 unrealengine 读取一些目录,而这无法识别路径中的“反斜杠”。
非常感谢大家的支持!
更新:不需要通过 cmd 进行,它也可以是另一种语言。目标是获取带有正斜杠的目录,然后由 unrealengine 读取。
一种方法是在写入文件之前用 SOLIDUS '/' 替换 REVERSE SOLIDUS '\' 字符。如果您使用的是受支持的 Windows 系统,则可以使用 PowerShell。
powershell -NoLogo -NoProfile -Command ^
(Get-ChildItem -Filter '*.*').FullName ^| ForEach-Object { $_ -replace '\','/'} ^| Out-File './FilesList.txt' -Encoding ascii
我注意到问题中没有关于将输出限制为文件而不是目录的问题。对于 cmd
,可以用 DIR /A:-D
完成。如果您只需要 PowerShell 中的文件,如果您使用的是 PowerShell 5.1+,请使用 Get-ChildItem -File -Filter '*.*'
。
Mofi 在评论中回复了这个解决方案:
I suppose that each backslash in in each file name must be escaped with one more backslash as that is the syntax for C++ strings. That was my thought. So the solution should be
(for /F "delims=" %%I in ('dir /B /S 2^>nul') do set "FileName=%%I" & setlocal EnableDelayedExpansion & echo !FileName:\=\!& endlocal)>F:\TEST\FilesList.txt
to have the file and directory names with two backslashes per\
in the text file. I recommend to use/A-D
instead of just/A
to exclude directories.
所以,完整的字符串是:
@echo off
(for /F "delims=" %%I in ('dir /B /S 2^>nul') do set "FileName=%%I" & setlocal EnableDelayedExpansion & echo !FileName:\=/!& endlocal)>F:\FilesList.txt
.bat读取所在文件夹中的文件,它获取路径并将其保存在.txt“F:\Fileslist.txt”中,而不是保存它使用 "\"
它保存它 "/"
.
再次感谢Mofi的解答!