【发布时间】:2021-05-13 10:26:52
【问题描述】:
我想在一个文本文件中去除 \ 的最后一个实例。 \ 处于浮动位置并且出现不同。
我想从 Unix 命令行实现它并将其放入 shell 脚本中。这适用于运行 J.P. Software 4nt、tcc、tccle 的 Windows 10 v20H2 x86。我还为基于 unix 的命令实现了 MKS 工具包
例如。我使用 cmd 提示符中的以下内容来创建输入文本原始文件:
set dr=d:\!Mp3_A-Z
echo Reading All Folders in Drive %dr...
dir/b /s %dr"\"*.mp3 > %destfolder\!geb3raw.lst
输入的 txt 文件有超过 100,000 行。
例如:来自原始 txt 文件的输入
D:\!Mp3_A-Z\!AB^5117\ABBA (Rock 061619)\ABBA - Dancing Queen '128k '03_52.mp3
D:\!Mp3_A-Z\!AB^5117\!Band - RJG (Rock 061519)\Nightsoil (1972 Beckford St Tapes) 06 - Smile Away '128k '04_40.mp3
输出:
ABBA - Dancing Queen '128k '03_52.mp3
Nightsoil (1972 Beckford St Tapes) 06 - Smile Away '128k '04_40.mp3
【问题讨论】:
-
我知道您只想要文件名。这可以在 Linux 上使用命令
basename完成。但是,您要求使用 unix 命令,但您提供的数据是 Windows 格式。 `\` 在 unix 上的含义与在 Windows 上的含义不同。请澄清您的问题。 -
我已经用 [shell] 标签和术语 shell 脚本替换了您的批处理文件引用和 [batch-file] 标签,正如您特别提到的“unix cmd 行”。如果您的意思有所不同,请在关闭之前查看您的标签并澄清您的问题。另请使用tour,并阅读How to Ask 的所有页面,以了解为什么您的代码请求在这里被视为题外话,不应得到答复。
-
通常情况下,Unix 模拟器包会替换
find这样的命令,Windows的意思是“在文件中定位字符串”,而Unix的意思是“查找文件”。Windows命令执行您似乎想做的事情(仅生成文件名的文件,没有路径)将是for /f "usebackq delims=" %%b in ("%destfolder%\!geb3raw.lst") do echo %%~nxb >>newfilename.txt注意到%destfolder%,而不是%destfolder被解析为“变量destfolder和>>附加到任何现有文件,因此您需要先删除该目标文件。 -
在 Unix 术语中,您似乎想要的是文件的“基本名称”——文件路径名的最后一个组成部分。如果文件名与 Unix 约定匹配,则有一个 Unix
basename命令将提供您想要的输出。我不知道该命令在您的环境中是否可用,也不知道它是否会处理反斜杠而不是文件名中的斜杠。试试看——它可能会奏效。
标签: bash shell batch-file text-processing