我在创建一个脚本时遇到了一些问题,该脚本在文件夹内的每个文件中查找特定文本,获取该文本之后的内容并将其设置为文件的名称,所有这些都在循环中,以对多个文件执行相同的操作.
例如,我有一个包含 file1、file2、file3 的文件夹
content in file1: sw_part = "ABC-DEF.GHJ";
content in file2: sw_part = "ABC-123.XYZ";
content in file3: sw_part = "ABCDE-FGHJ.KLMN";
结果应该是:
file1 renamed to ABC-DEF.GHJ
file2 renamed to ABC-123.XYZ
file3 renamed to ABCDE-FGHJ.KLMN
我做的是这样的:
for /F "tokens=2 delims==" %%a in ('findstr /I "sw_part" file1') do set "swpart=%%a"
echo sw part is: %swpart%
copy file1 "%swpart%"
这工作正常,但它仅适用于给定的文件(我不能让它与循环一起工作),并且它;
在最后重命名文件。有什么帮助吗?
它需要在 BATCH 中完成。PowerShell 也可以。
谢谢
以下脚本将执行您想要的操作。
cd C:\temp\swpart
$files = [System.Collections.ArrayList]@()
select-string -Path "*.*" -Pattern "sw_part" | ForEach-Object {
$old_filename = $_.Filename
$new_filename = $_.line -replace "^.*sw_part = ""","" -replace """.*$",""
# put everything in array, so the files get closed and can be renamed later.
$null = $files.Add(@{"old"=$old_filename;"new"=$new_filename})
}
$files |ForEach-Object{
$old_filename = $_.old
$new_filename = $_.new
rename-item $old_filename $new_filename -Force
}
确保更改第一行以更改文件所在的路径。
如果由于某种原因并非所有文件都被重命名,请再次运行该脚本。然后该文件仍在使用中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句