Powershell到可执行的.bat

时间:2017-04-03 04:48:23

标签: powershell datetime batch-file code-conversion

我正在尝试将以下脚本(在Powershell中)转换为可执行的.bat文件。基本的想法是我有一堆文件,文件名由3个部分组成:

  • 第1部分:TKSYSTEMID

  • 第2部分:变量名称

  • 第3部分:YYYY MM DD HHMM

所以一个简单的例子如下:class Controller { public example = Example; ... }

我正在寻找一个.bat文件,它可以替换TKSYSTEM ID和YYYY MM DD HHMM,并提示用户输入。

到目前为止我的powershell脚本是:

TKSYSTEMID NOTES YYYY MM DD HHMM

有人可以如此善良地告诉我如何转换它或为此提供.bat脚本吗?这将意味着世界。

4 个答案:

答案 0 :(得分: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}

答案 1 :(得分: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%"
)

答案 2 :(得分: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"

答案 3 :(得分:0)

我开始使用@npocmaka的解决方案,但是在编码非美国字符时遇到了麻烦。以下解决方案可以解决这个问题。

<# : Save as UTF8 without BOM
@ECHO OFF
powershell.exe -NoProfile -Command "Get-Content -Path \"%~f0\" -Encoding UTF8 -Raw | Invoke-Expression"
PAUSE
EXIT /B %errorlevel%
:Script part below #>
Set-StrictMode -Version Latest

Write-Host("Hello Germans: ÄÖÜäöü")