从Windows cmd中的txt文件中删除文件夹

时间:2016-03-24 11:50:37

标签: powershell batch-file text replace cmd

我有这样的千行文件。

x:/folder/folder/PN.xxx 
y:/folder/PN.xxx 
...

我需要制作用于更改此脚本的脚本(用于在excel中使用):

x;file.xxx
y;file.yyy

对我而言,最好的结果是:

x;PN;x:/folder/folder/
y;PN;y:/folder/

我尝试在cmd中使用最简单的方法:

D:\>powershell -Command "(gc serverPN.txt) -replace 'xxx', ';' | Out-File myFile.txt"

但我不知道,在XXX中写什么是needet,当我要删除/ * /之间的所有内容时。这样的事情可能很接近:“\\[\D]*\\'”。

感谢您的帮助。

5 个答案:

答案 0 :(得分:3)

假设行存储在text_file.txt中,对于解决方案,您需要for /F循环和~修饰符进行循环变量扩展(另请参阅{{1详情):

for /?

对于您问题中的示例数据,这将在以下输出中删除:

for /F "usebackq delims=" %%L in ("text_file.txt") do (
    echo(%%~dL;%%~nxL;%%~dpL
)

如果您希望输出中没有扩展名的纯文件名,请将x:;PN.xxx;x:/folder/folder/ y:;PN.xxx;y:/folder/ 替换为%%~nxL

答案 1 :(得分:1)

在PowerShell中尝试:

gc "serverPN.txt" | % { 
    get-item $_ | %{ 
        "$($_.PSDrive);$($_.Name);$($_.Directory)" | Out-File "myFile.txt" -Append 
    } 
}

答案 2 :(得分:1)

这应该是您要求的正则表达式::.*/,您可以将其替换为;

powershell -Command "(gc serverPN.txt) -replace ':.*/', ';' | Out-File myFile.txt"

答案 3 :(得分:0)

$test = 'C:/test1/test2/test3/test4/testfile.xls'

$newfile =$test.Substring(0,2) + ';' + $test.Substring($test.LastIndexOf('/')+1,($test.Length-$test.LastIndexOf('/')-1))

输出:

C:;testfile.xls

答案 4 :(得分:0)

虽然它不是心爱的PowerShell,但cmd也可以产生“最好的结果”。

C:>TYPE fi2.bat
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

FOR /F "usebackq tokens=*" %%f IN (`TYPE fi2.txt`) DO (
    SET DRIVE=%%~df
    SET DRIVE=!DRIVE:~0,1!

    SET FILENAME=%%~nf

    SET DIRNAME=%%~pf
    SET DIRNAME=!DIRNAME:\=/!

    ECHO !DRIVE!;!FILENAME!;%%~df!DIRNAME!
)

EXIT /B 0

C:>CALL fi2.bat
x;PN;x:/folder/folder/
y;PN;y:/folder/