簡體   English   中英

Powershell腳本重命名目錄中的所有文件

[英]powershell script to rename all files in directory

任務:
將各種轉儲到其中的.csv文件的目錄。 這些可能類似於file1.csv,file2.csv等。
問題:
遍歷文件,然后將其重命名為標准化的“ newfilename.csv”。 然后,該文件將由外部程序處理,並被重命名並移出目錄。 我有一個PowerShell腳本,它可以做到這一點:

ent## Set the file location where the log files are
$file = "C:\logs"   

$new = "newfilename.csv"
$chkFile = "C:\logs\newfilename.csv"
$fileExists = Test-Path $chkFile

## Loop through all the .csv files in the log folder
foreach ($file in gci $file -include *.csv -recurse){       
    if($fileExists -eq $True){
        Write-Host "that file exists!"
        Start-Sleep -s 60
    } else{
    Write-Host "file doesn't exist, renaming..."
    rename-item -path $file -newname ("$new")}
    Start-Sleep -s 10   
}

問題是,給定目錄中的5個文件,它將通過,重命名第一個文件,然后返回文件列表,在$ fileExists的“ -eq $ True”上返回“ false”。 重新開始時文件列表是否不刷新(即:“ foreach”的開頭是否正在創建某種數組)? 我從未真正編寫過PowerShell腳本。 我應該使用其他步驟瀏覽文件嗎? 我應該執行的列表是否有“刷新”?

測試$chkFile是否在循環運行之前執行一次。 如果要對每個文件進行評估(例如,另一個進程已經完成工作並在休眠期間將“ newfilename.csv”移開了),請將TestPath調用移至foreach內部。

是的,在開始foreach循環之前,對gci $file -include *.csv -recurse進行一次評估。 如果您想每次刷新列表,我將執行以下操作,該操作實際上多次調用foreach循環。

while($true) {
    $csvFiles = gci $file -include *.csv -recurse

    if ($csvFiles.Length -eq 0) {
         break
    }

    foreach ($file in gci $file -include *.csv -recurse) {       
        if (Test-Path $chkFile) {
            Write-Host "that file exists!"
            Start-Sleep -s 60
        } else {
            Write-Host "file doesn't exist, renaming..."
            rename-item -path $file -newname ("$new")
            Start-Sleep -s 10
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM