[英]Linux Bash to Windows Batch Script Questions
我是一個Linux用戶,被迫在Windows工作站上工作。 我有一個為bash編寫的腳本,需要將其轉換為Windows Batch。 過去,我並沒有遇到太多麻煩,但現在遇到了兩個我無法弄清楚的問題。 這是原始的Linux腳本:
#!/bin/bash
if [ $# != 1 ] ; then
echo "usage: createMavenDirs.sh <name>"
exit 1
fi
timestamp=`date +"%Y-%m-%d-%s"`
projectName="${1}_${timestamp}"
groupID="com.hostname"
version="1.0"
pomFill="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project>\n\t<modelVersion>4.0.0</modelVersion>\n\t<groupId>${groupID}.${1}</groupId>\n\t<artifactId>${1}</artifactId>\n\t<name>\${artifactId}</name>\n\t<version>${version}</version>\n</project>"
clear
mkdir -p ${projectName}/src/{main/{java,resources,filters,assembly,config,webapp},test/{java,resources,filters},site}
touch ${projectName}/{LICENSE,NOTICE,README}.txt
touch ${projectName}/pom.xml
echo -e ${pomFill} > ${projectName}/pom.xml
tree ${projectName}
exit 0
首先,我想說“是”,我知道有執行此操作的工具,但是由於工作中的限制非常嚴格,因此我必須使用這樣的選項。 其次,這是我遇到的兩個問題。
“ mkdir”行:Windows是否可以像Linux一樣做到這一點?
我在其中創建pom文件的“ echo”行:Windows可以像在Bash腳本中一樣在Windows中回顯換行符和選項卡,並將其重定向到外部文件嗎?
就像我說的,我知道還有其他方法可以做到這一點,但是強大的力量迫使我走這條路。 無論如何,感謝所有花時間閱讀的人。
祝你有美好的一天 :-)
更新:我意識到Windows確實有一個“ echo”和“ mkdir”,但是我需要能夠以一種非常特定的方式使用它們,就像我在Linux腳本中使用它們一樣。 具體來說,我想使目錄與Linux腳本中的目錄完全相同,並且需要在外部文件中回顯換行符'\\ n'或'\\ r'和制表符'\\ t'。
更新2:我無法安裝任何新的軟件/實用程序/等。 到我的工作站上。 我只能使用那里的東西。
@brice是正確的,Windows上的批處理編程絕對是瘋狂的。 但我相信您仍然可以使它起作用,但是,它不會等效於行到行。
擔心的事情:
據我測試,此批處理文件與原始腳本具有相同的功能:
@echo off
setlocal
if "%1"=="" (
echo usage: createMavenDirs.bat ^<name^>
goto:eof
)
::BEWARE: %date% and %time% are locale dependant,
::I get 2012-04-27113505,55 YMMV
set timestamp=%date%%time::=%
set projectName=%1_%timestamp:,=%
set groupID=com.hostname
set version=1.0
set artifactId=What_is_this
::Create root dir
md "%projectName%"
::Make everything relative to %projectName%
pushd "%projectName%"
::Generate the pom file
(
echo.^<?xml version="1.0" encoding="UTF-8"?^>
echo.^<project^>
echo. ^<modelVersion^>4.0.0^</modelVersion^>
echo. ^<groupId^>%groupID%.%1^</groupId^>
echo. ^<artifactId^>%1^</artifactId^>
echo. ^<name^>\%artifactId%^</name^>
echo. ^<version^>"%version%"^</version^>
echo.^</project^>
) > pom.xml
::Loop unrolling !
md src
cd src
md main
cd main
md assembly config filters java resources webapp
cd ..
md site
md test
cd test
md filters java resources
cd ..
cd ..
::This is touch: copy /b LICENCE.txt +,,
::but it will not create the file. Use this echo trick instead
echo. 2>LICENCE.txt
echo. 2>NOTICE.txt
echo. 2>README.txt
::Leave %projectName%
popd
::Display dirs and files
tree /a /f "%projectName%"
endlocal
我從未在批處理腳本中使用循環展開;)
基本上沒有辦法處理批處理文件。
批處理文件已損壞 。 硬着頭皮使用Java。 (或通過使用Jython作弊...)
Windows到mkdir
的等效命令是md
或mkdir
:
c:\\>mkdir \\foo\\bar c:\\>dir [...] foo [...]
echo
也可以批量使用:
c:\\>echo some text> Myfile.txt c:\\>type Myfile.txt some text c:\\>
注意問題:引號也將出現在腳本中。 因此,例如, echo "abcdef"
也將打印雙引號。
據我了解, echo
命令不支持制表符轉義。
順便說一句,如果可以的話,我建議僅通過Cygwin在Windows上運行bash ...如果您有Python,那也可能是一個救命稻草。 如果這些選項都不可用,我會為您服務。
您可以使用cygwin或mingw在Windows上運行bash
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.