的最後一個字符我使用這個批處理文件來創建文件如何刪除文件
@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,
我怎麼刪除最後一個逗號?
的最後一個字符我使用這個批處理文件來創建文件如何刪除文件
@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,
我怎麼刪除最後一個逗號?
@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
問題是你不知道會有多少行/文件。所以你必須用你的代碼編寫的方式來使用兩個循環。一個用於統計線路,另一個用於執行操作。對於第一條線而不是最後一條處理方式更容易。那麼這個怎麼樣:
@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
這似乎等同於您所需的輸出。如果你真的想在行尾有,
而不是在下一行的開頭,告訴我,我會更新代碼,但它會非常難看。
@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
你能否請[編輯]解釋爲什麼這段代碼回答這個問題?僅限代碼答案[阻止](http://meta.stackexchange.com/q/148272/274165),因爲他們沒有教導解決方案。 –
爲什麼回波%%一個,則使用?是否有任何需要,我相信你可以使用回聲%% a,我想知道是否有一個原因,其他明智的刪除逗號後回聲%% a將做必要的 – prudviraj
@prudviraj:也許插入一個逗號在所有行中? OP只想「刪除**最後的逗號」! – Aacini