2017-04-03 139 views
1

我試圖讓下面的腳本,這是在Powershell,轉換爲可執行文件.bat文件。其基本思路是,我有一堆文件,其中文件名存在3個部分組成的:Powershell可執行.bat

  • 1部分:TKSYSTEMID

  • 第2部分:變量名

  • 第3部分:年月日HHMM

所以一個簡單的例子看起來像:TKSYSTEMID NOTES YYYY MM DD HHMM

我正在尋找一個.bat文件,它可以用用戶提示輸入的內容替換TKSYSTEM ID和YYYY MM DD HHMM。

PowerShell腳本我至今是:

$NEWSYSTEMID = Read-Host -Prompt 'Please input SEJ SYSTEM ID' 
Write-Host "Changing TKSYSTEMID to '$NEWSYSTEMID'" 
dir | Rename-Item -NewName {$_.name -replace 'TKSYSTEMID',$NEWSYSTEMID} 

$NEWDATETIME = Read-Host -Prompt 'Please input the upload date and time' 
Write-Host "Changing YYYY MM DD HHMM to '$NEWDATETIME'" 
dir | Rename-Item -NewName {$_.name -replace 'YYYY MM DD HHMM',$NEWDATETIME} 

有人能這麼好心給我如何轉換這種或爲此提供一個蝙蝠腳本?這將意味着世界。

+2

爲什麼如果您有PowerShell腳本需要批處理文件?批處理文件是舊的Windows命令提示符的腳本。 PowerShell是新的(也是更好的)命令提示符。這兩種腳本都是可執行的。 –

+0

對不起,我不知道,PowerShell可以做一個可執行文件。我只需要一個簡單的選項來雙擊並運行提示來重命名文件,但是現在它的方式似乎無法使其成爲可執行文件。 (我沒有很多這些東西的知識,所以我來這裏尋找建議哈哈) –

+0

可能重複[有沒有什麼辦法使雙擊.ps1文件的PowerShell腳本工作?](http:// stackoverflow .com/questions/10137146/is-there-any-way-make-powershell-script-work-by-click-ps1-file) –

回答

1

你可以用PowerShell的代碼轉換成批處理文件,如:

<# : batch portion 
@echo off & setlocal 

(for %%I in ("%~f0";%*) do @echo(%%~I) |^
powershell -noprofile "$argv = $input | ?{$_}; iex (${%~f0} | out-string)" 

goto :EOF 
: end batch/begin powershell #> 

$NEWSYSTEMID = Read-Host -Prompt 'Please input SEJ SYSTEM ID' 
Write-Host "Changing TKSYSTEMID to '$NEWSYSTEMID'" 
dir | Rename-Item -NewName {$_.name -replace 'TKSYSTEMID',$NEWSYSTEMID} 

$NEWDATETIME = Read-Host -Prompt 'Please input the upload date and time' 
Write-Host "Changing YYYY MM DD HHMM to '$NEWDATETIME'" 
dir | Rename-Item -NewName {$_.name -replace 'YYYY MM DD HHMM',$NEWDATETIME} 
+0

這正是我需要的!奇蹟般有效。感謝一堆! –

0

Windows在默認情況下不允許雙擊.PS1文件運行Powershell腳本。這實際上是一個security feature旨在保護那些不太懂電腦的用戶。在那些日子裏,VBScript文件是所有類型惡意軟件的流行攻擊媒介。這是因爲VBScript文件在默認情況下可以雙擊運行。騙過沒有經驗的用戶感染蠕蟲,例如Love Letter,太容易了。

作爲work-around,創建啓動Powershell的shell並將參數傳遞給腳本的快捷方式。在鏈接腐爛的情況下,:

powershell.exe -command "& 'C:\A path with spaces\MyScript.ps1' -MyArguments blah" 
1

下面的批處理文件實際上是你原來PowerShell代碼直接翻譯,區別每個文件只能重命名一次。

@echo off 
setlocal EnableDelayedExpansion 

set /P "NEWSYSTEMID=Please input SEJ SYSTEM ID: " 
set /P "NEWDATETIME=Please input the upload date and time: " 
echo Renaming files 
for /F "tokens=*" %%a in ('dir /B') do (
    set "name=%%a" 
    set "name=!name:TKSYSTEMID=%NEWSYSTEMID%!" 
    set "name=!name:YYYY MM DD HHMM=%NEWDATETIME%!" 
    ren "%%a" "!name!" 
) 

然而,如果在文件名中的「第2部分」是由一個字組成,像NOTES,則代碼可以更簡單,這是因爲「部件1,2和休息」(令牌1, 2 *)直接進入重命名過程:

@echo off 
setlocal 

set /P "NEWSYSTEMID=Please input SEJ SYSTEM ID: " 
set /P "NEWDATETIME=Please input the upload date and time: " 
echo Renaming files 
for /F "tokens=1,2*" %%a in ('dir /B') do (
    ren "%%a %%b %%c" "%NEWSYSTEMID% %%b %NEWDATETIME%" 
)