簡體   English   中英

從Linux Bash到Windows的批處理腳本問題

[英]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

首先,我想說“是”,我知道有執行此操作的工具,但是由於工作中的限制非常嚴格,因此我必須使用這樣的選項。 其次,這是我遇到的兩個問題。

  1. “ mkdir”行:Windows是否可以像Linux一樣做到這一點?

  2. 我在其中創建pom文件的“ echo”行:Windows可以像在Bash腳本中一樣在Windows中回顯換行符和選項卡,並將其重定向到外部文件嗎?

就像我說的,我知道還有其他方法可以做到這一點,但是強大的力量迫使我走這條路。 無論如何,感謝所有花時間閱讀的人。

祝你有美好的一天 :-)

更新:我意識到Windows確實有一個“ echo”和“ mkdir”,但是我需要能夠以一種非常特定的方式使用它們,就像我在Linux腳本中使用它們一樣。 具體來說,我想使目錄與Linux腳本中的目錄完全相同,並且需要在外部文件中回顯換行符'\\ n'或'\\ r'和制表符'\\ t'。

更新2:我無法安裝任何新的軟件/實用程序/等。 到我的工作站上。 我只能使用那里的東西。

@brice是正確的,Windows上的批處理編程絕對是瘋狂的。 但我相信您仍然可以使它起作用,但是,它不會等效於行到行。

擔心的事情:

  • 時間戳取決於語言環境。 我有法語版本,請調整
  • 要輸出選項卡,必須將選項卡插入記事本中並將其留在此處。 HTML將吞噬我原始腳本中的選項卡。
  • 如果您將制表符作為第一個字符,則點(。)是必填項
  • 我找不到您在哪里獲得工件ID

據我測試,此批處理文件與原始腳本具有相同的功能:

@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作弊...)

原版的:

  1. Windows到mkdir的等效命令是mdmkdir

     c:\\>mkdir \\foo\\bar c:\\>dir [...] foo [...] 
  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM