unix2dos 批處理實現

DOS/Windows和Linux/Unix的文件換行回車格式不同,基於 DOS/Windows 的文本文件在每一行末尾有一個 CR(回車)和 LF(換行),而 UNIX 文本只有一個換行。

在這兩個操作系統下傳輸文件時需要進行格式轉換,Unix環境下的文件格式轉換工具有dos2unix命令,

Windows環境下可以用UltraEdit進行轉換。

也可以用一個批處理腳本實現

實現的想法來源於 csdn

http://topic.csdn.net/u/20100330/15/805aa786-eb37-4ec9-bd52-2c6b7936cd34.html?seed=1752333021&r=72909758#r_72909758

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::    一。 準備工作

:: 要先輸入命令 cmd /v:on  打開環境變量延遲。因爲默認情況下環境變量延遲是關閉的

@echo off

:: 轉換成中文代碼頁
chcp 936

::設置要轉換文件格式的”根“ 文件夾。也是日誌文件所在路徑

set /p route=請指定要轉換的單個文件的名字(包括路徑) 或者批量轉換 文件所在目錄 :

:: 抑制錯誤輸出
cd /d %route% 2>nul
if errorlevel 1 goto single

::得到”所輸入路徑下” 的 “所有目錄名”, 存放於 創建的臨時文件夾 ###temp
rd /s/q %route%/###temp
md %route%/###temp

for /r %%i in (.) do echo %%i >> %route%/###temp/ddd.txt
for /f "delims=." %%i in (%route%/###temp/ddd.txt) do echo %%i >> %route%/###temp/ddd2.txt

del %route%/###temp/ddd.txt
ren %route%/###temp/ddd2.txt ddd.txt
::::::::::::::::::::::::::::::::::::::::::

::取 各個目錄下的文件名, 不帶路徑。同時排除所有目錄名 dir /b /a-d
:: ”每一個目錄下“ 的 “所有文件名” 組成一個文本文件, 即 1.txt 2.txt...

set sequence=1001
for /f %%i in (%route%/###temp/ddd.txt) do (
dir /b /a-d %%i >> %route%/###temp/!sequence!.txt
set /a sequence+=1
)

echo 準備工作完成 !
echo.
echo 轉換開始。詳細情況請看日誌 %route%/###temp/unix2dos.log
echo 請稍等 ……
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::    二。 記錄日誌,轉換開始。

::        思路:取 “每一個目錄” ---》 
::                取 “每一個目錄” 裏的 “每一個文件” ---》
::                         取 “每一個文件” 的 “每一行”
::        即 三層 for 循環

echo %date% %time% >> %route%/###temp/unix2dos.log
echo Translation Begin Now ! >> %route%/###temp/unix2dos.log

:: 所有路徑名 所在文件 ddd.txt 中 每一行 對應一個 號, 即 sequence

set sequence=1001

for /f %%i in (%route%/###temp/ddd.txt) do (
cd /d %%i
for /f %%j in (%route%/###temp/!sequence!.txt) do (
for /f "tokens=1,2* delims=@" %%k in ('type %%j') do (
echo %%k >> ###%%j
)
:: ###%%j 乃是臨時所用文件名 *^__^*
del %%j
ren ###%%j %%j
echo %date% %time% File %%i%%j                  has been translated successfully >> %route%/###temp/unix2dos.log
)
set /a sequence+=1
echo. >> %route%/###temp/unix2dos.log
echo %date% %time%  All the file in the Directory %%i         have been translated successfully >> %route%/###temp/unix2dos.log
echo. >> %route%/###temp/unix2dos.log
echo. >> %route%/###temp/unix2dos.log
)
goto success
:single
if not exist %route% goto end
for /f "tokens=1,2* delims=@" %%i in ('type %route%') do echo %%i%%j >> %route%###
move /y %route%### %route%
:success
echo 轉換完成
:end
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章