【问题标题】:Remove folders from txt file in windows cmd从 Windows cmd 中的 txt 文件中删除文件夹
【发布时间】:2016-03-24 11:50:36
【问题描述】:

我有这样的一千行文件。

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"

但我不知道,当我想删除 /*/.这样的事情可以很接近:“\\[\D]*\\'”。

感谢您的帮助。

【问题讨论】:

  • 那么,你想要drive_letter;file_name.extension,不管它们之间的路径是什么?
  • 是的,我需要删除路径。最好的结果是:drive_letter;file_name.extension;path.
  • 那么你想要什么:x;file.xxxx;PN;x:/folder/folder/x;PN.xxx;x:/folder/folder/file 代表什么(原行中没有出现)?
  • 对不起,File.xxx 和 Pn.xxx 是一样的。 x;file.xxx 会很好,但是 x;PN;x:/folder/folder/ 会更好地用于 excel 中的下一个工作。

标签: powershell batch-file text replace cmd


【解决方案1】:

假设这些行存储在text_file.txt 中,对于 解决方案,您需要一个for /F 循环和用于循环变量扩展的~ 修饰符(详见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 替换为%%~nL

【讨论】:

    【解决方案2】:

    在 PowerShell 中尝试:

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

    【讨论】:

    • 我真的很喜欢您检索项目并使用对象的想法。唯一的缺点是,您需要能够检索所有这些文件
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:
      $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
      

      【讨论】:

        【解决方案5】:

        虽然它不是最受欢迎的 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/
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-28
          • 2012-08-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多