2017-10-18 66 views
0

我試圖分裂在文本文件中的條目,它的格式爲:使用引號,以顯示在上面的代碼空間Windows批處理文件 - 分割字符串與特定的字符或空格作爲分隔符

"C:\Software\New folder\New folder\New folder\New folder\OneDrive - Test " 
"C:\Software\New folder\New folder\New folder\New folder\OneDrive - Test " 
"C:\Software\New folder\New folder\New folder\New folder\OneDrive - Test  " 

。簡而言之,我的文本總是以兩個或更多空格結尾。

所以我想分隔符爲,(是兩個空格),所以我最終的輸出應使用引號,以顯示空間是

"C:\Software\New folder\New folder\New folder\New folder\OneDrive - Test" 

另外,我也知道,最後的話在字符串中總是One Drive - Test

即使我可能分裂在下面的格式輸出,然後我可以附加到每一行One Drive - Test

"C:\Software\New folder\New folder\New folder\New folder" 

謝謝你們,真的厭倦了批處理。

+2

檢查修剪右功能 - http://www.dostips.com/DtTipsStringManipulation.php#Snippets.TrimRightFOR – npocmaka

+1

@npocmaka我愛你的男人。太感謝了。 – user3839914

回答

1

還有就是for /F loop將字符串拆分爲某個分隔符。由於您有兩個標記單個分隔符的字符(即兩個空格),因此您可以用單個字符替換這些不能在字符串中其他位置出現的字符;例如,可以使用|,因爲它在文件路徑/名稱中是不允許的。這是怎麼可能看起來像:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

rem // Read input text file `txtfile.txt` line by line: 
for /F "usebackq delims= eol=|" %%L in ("textfile.txt") do (
    rem // Store line string in environment variable: 
    set "LINE=%%L" 
    rem // Toggle delayed expansion to avoid loss of/trouble with exclamation marks: 
    setlocal EnableDelayedExpansion 
    rem /* Replace two-character delimiter by a single character: 
    rem (the `|| endlocal` suffix is only executed in case the current line contains 
    rem delimiters only, because the `for /F` loop would not execute in that case) */ 
    (for /F "delims=| eol=|" %%F in ("!LINE: =|!") do (
     rem // Toggle back delayed expansion: 
     endlocal 
     rem /* Return part before first delimiter (actually this returns the very first 
     rem non-empty sub-string before the first (sequence of) delimiter(s), or, 
     rem if the string begins with (a) delimiter(s), the very first non-empty 
     rem sub-string between the first and second (sequences of) delimiters: */ 
     echo/%%F 
    )) || endlocal 
) 

endlocal 
1

如果所有線路按照所示的模式的話,而不是試圖處理字符串,你可以處理文件引用

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    rem For each line in input file 
    for /f "usebackq delims=" %%a in ("inputFile.txt") do (
     rem Retrieve the parent folder of the read reference 
     for %%b in ("%%~dpa.") do (
      rem And echo it without the ending backslash (see the dot in the upper line) 
      echo %%~fb 
     ) 
    ) 

%%a將舉行各自的讀線的同時遍歷輸入文件

%%~dpa是在%%a引用與一個結束反斜槓

元件的驅動器和路徑通過添加.到先前路徑和RETR ieving它的完整路徑,我們刪除結束反斜槓(除非路徑是一個驅動器的根目錄)

要保存的加工線,你只需要重定向輸出

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    >"outputFile.txt" (
     for /f "usebackq delims=" %%a in ("inputFile.txt") do (
      for %%b in ("%%~dpa.") do echo %%~fb 
     ) 
    )