2015-10-19 60 views
0

的最後一個字符我使用這個批處理文件來創建文件如何刪除文件

@echo off 
(for /f "delims=" %%a in ('dir/b/a-d *.tex') do echo %%a,)>liste.dat 

結果的列表是這樣

file1.tex, 
file2.tex, 
file3.tex, 
... 
lastfile.tex, 

我怎麼刪除最後一個逗號?

+0

爲什麼回波%%一個,則使用?是否有任何需要,我相信你可以使用回聲%% a,我想知道是否有一個原因,其他明智的刪除逗號後回聲%% a將做必要的 – prudviraj

+0

@prudviraj:也許插入一個逗號在所有行中? OP只想「刪除**最後的逗號」! – Aacini

回答

2
@echo off 
setlocal EnableDelayedExpansion 

set "comma=" 
< NUL (
for %%a in (*.tex) do (
    set /P "=!comma!%%a" 
    set comma=,^ 
%Empty line% 
) 
echo/ 
) > liste.dat 

編輯回覆評論

行動!當我開發這個代碼,我只是顯示在屏幕上,它看起來是正確的輸出:

C:\> test.bat 
One.tex, 
Three.tex, 
Two.tex 

即使輸出發送到一個文件,該文件顯示在屏幕上,輸出看起來是正確的:

C:\> test.bat > output.txt 

C:\> type output.txt 
One.tex, 
Three.tex, 
Two.tex 

然而,每個逗號後插入字符僅僅是一個LF因此,如果這個文件是與記事本,打開LF的被轉換爲「行結束」;只是cmd.exe 屏幕輸出將LF轉換爲CR + LF對(「熟化輸出」而不是「原始輸出」)。

解決這一問題的細節的方式是將每個逗號後一個完整的CR + LF對:

@echo off 
setlocal EnableDelayedExpansion 

for /F %%a in ('copy /Z "%~F0" NUL') do set "CR=%%a" 

set "comma=" 
< NUL (
for %%a in (*.tex) do (
    set /P "=!comma!%%a" 
    set comma=,!CR!^ 
%Empty line% 
) 
echo/ 
) > liste.dat 
+0

'%空行%'用於附加一個新行字符。到'逗號',對嗎? – aschipfl

+0

@aschipfl:是的! – Aacini

+0

我誤解了預期的輸出嗎?輸出示例用逗號在每行上顯示一個條目。你們全都在一條線上。 – Squashman

0

問題是你不知道會有多少行/文件。所以你必須用你的代碼編寫的方式來使用兩個循環。一個用於統計線路,另一個用於執行操作。對於第一條線而不是最後一條處理方式更容易。那麼這個怎麼樣:

@echo off 
SETLOCAL EnableDelayedExpansion 
SET /a i=0 
(for /f "delims=" %%a in ('dir /b/a-d *.tex') do (
    IF !i!==1 (
     echo ,%%a 
    ) ELSE (
     ECHO %%a 
     SET /a i=1 
    ) 
) 
)>liste.txt 

這會產生這樣的事情:

file1.tex 
,file2.tex 
,file3.tex 
... 
,lastfile.tex 

這似乎等同於您所需的輸出。如果你真的想在行尾有,而不是在下一行的開頭,告訴我,我會更新代碼,但它會非常難看。

3
@echo off 
SETLOCAL EnableDelayedExpansion 
SET "in=" 
(
for %%a in (*.tex) do (
    IF "!in!"=="" (
     set in=%%a 
    ) ELSE (
     echo !in!, 
     set in=%%a 
    ) 
) 
echo !in! 
)>liste.dat 
+2

你能否請[編輯]解釋爲什麼這段代碼回答這個問題?僅限代碼答案[阻止](http://meta.stackexchange.com/q/148272/274165),因爲他們沒有教導解決方案。 –