当我在目录中时,以下代码有效:
gci | % {rni $_.Name ($_.Name -replace '120', '121')}
如何创建一个包含powershell代码的批处理文件,该代码可以在每个目录中正常运行而不会出现错误。我只想启动file.bat,它将重命名file.bat所在的每个文件夹中的所有文件?
powershell -C "gci | % {rni $_.Name ($_.Name -replace '120', '121')}"
这不起作用,这是错误:
Expressions are only permitted as the first element of a pipeline.
At line:1 char:52 + gci | {rni $_.Name ($_.Name -replace '501', '121')} <<<<
答案 0 :(得分:1)
你本可以更具体一点。我现在正在做出假设,试图解决你的问题 -
当前脚本将在任何目录中运行,获取该目录中的所有子项,并将121替换为121.如果名称没有120,则无效。
基于此,我建议进行2次修改 -
以下是示例代码 -
Set-location <dir>
gci -Filter "*120*" | % {rni $_.Name ($_.Name -replace '120', '121')}
答案 1 :(得分:1)
喜剧回答:
echo Hi
是一个批处理文件,它可以在任何目录中正常工作而不会出现错误&#34;,这就是你要求的字面意思。
半答案,这是一个批处理文件,它将在当前文件夹中的文件中执行120到121的等效重命名,这是PowerShell所做的,这似乎是你要求的:
@echo off
setlocal ENABLEDELAYEDEXPANSION
for %%f in (*120*) do (
set _f=%%f
ren "%%f" "!_f:120=121!"
)
虽然您询问批处理文件并标记了有关批处理文件的问题,但我怀疑这不是您想要的。也许你的意思是&#34;我怎样才能指定它运行的目录?&#34;那么也许这个:
powershell -C "gci '%1' | % {rni $_.Name ($_.Name -replace '120', '121')}"
如果将此文件另存为要从命令提示符运行的批处理文件,则%1是您为批处理文件提供的参数,该文件嵌入在PowerShell代码中,引用为gci的输入。然后你可以运行myscript.bat "c:\data files"
来启动PowerShell并重命名&#34; c:\ data files \&#34;中的文件。
或许,如果你问的更多关于&#34;没有错误&#34;部分来自你的标题,那么你需要接受你可能没有权限列出文件夹内容,或重命名文件的权限,或重命名文件可能会导致冲突名称,在这种情况下你需要的是添加
`-ErrorAction -Ignore`
到gci和rni,从某种意义上说,这将使他们&#34;无误地运行&#34;
认真回答:%是批处理文件中的特殊字符,您需要通过编写两次来转义它。
powershell -C "gci | %% {rni $_.Name ($_.Name -replace '120', '121')}"
否则它会被吞下并且你得到错误&#34;表达式只允许作为管道的第一个元素。&#34;
NB。您正在尝试重命名文件夹中的每个文件,无论名称中是否有120,这都很糟糕。按照Nikhil Gupta关于如何避免这样做的建议。