2017-04-03 138 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%" 
)