我可以批量重命名目录中的文件,也可以用计数代替每个文件名,但是我需要将两者结合起来。
批量重命名(保留原始名称的前2个字符):
Get-ChildItem * |
Rename-Item -NewName { $_.BaseName.Split('-')[0] + $_.Extension }
(我知道是部分硬编码的解决方案!)
或者,添加计数:
$count = 1
Get-ChildItem * | % { Rename-Item $_ -NewName (‘{0}.xlsx’ -f $count++) }
(我什至都不梦想尾随0)
我试图将两者结合起来,但无济于事。我在做什么错了?
我的尝试失败:
$count = 1
Get-ChildItem * |
Rename-Item -NewName { $_.BaseName.Split('-')[0] -f $count++ + $_.Extension }
答案 0 :(得分:1)
您误解了format operator的工作方式。您需要带有占位符( std::vector<std::vector<int>> getAllMonomials(int order, int dimension) {
std::vector<std::vector<int>> to_return;
if (1 == dimension) {
for (int i = 0 ; i <= order; i++){
to_return.push_back({i});
}
return to_return;
}
for (int i = 0 ; i <= order; i++) {
std::vector<std::vector<int>> all_options_with_this_var_at_degree_i = getAllMonomials(order - i, dimension - 1);
for (int j = 0; j < all_options_with_this_var_at_degree_i.size(); j++) {
all_options_with_this_var_at_degree_i.at(j).insert(all_options_with_this_var_at_degree_i.at(j).begin(), i);
}
to_return.insert(to_return.end(), all_options_with_this_var_at_degree_i.begin(), all_options_with_this_var_at_degree_i.end());
}
return to_return;
}
)的格式字符串,以使该运算符起作用。我也建议在该表达式周围加上分组括号,即使在这种情况下不需要这样做。只是为了安全起见。
{0}
话虽如此,您显然想将计数器变量的值附加到原始文件名中的片段上,而不是将该片段用作格式字符串。为此,您可以简单地将计数器连接到片段,就像使用扩展一样。
为使计数器正常工作,您还需要指定正确的范围。每次重命名文件时,使用方式都会在脚本块的本地范围内定义一个新变量('foo {0} bar' -f $some_var) + $other_var
,因此父范围内的变量$counter
永远不会递增。使用$counter
或script:
范围修饰符可获取您实际打算使用的变量。
global:
如果您确实想使用格式运算符而不是字符串连接($count = 1
Get-ChildItem * |
Rename-Item -NewName { $_.BaseName.Split('-')[0] + $script:count++ + $_.Extension }
),则可以这样使用它:
+
答案 1 :(得分:-1)
要计算$ count,必须循环进行。
$count = 1
Get-ChildItem * | foreach-object { Rename-Item -NewName { $_.BaseName.Split('-')[0] -f
count++ + $_.Extension } }
%是您在“添加计数”方法中使用的foreach-object cmdlet的别名。 刚刚将其添加到失败的尝试中。