วิธีการเปลี่ยนชื่อไฟล์ตามการประทับเวลาด้วยแบทช์สคริปต์?


0

สมมติว่าฉันมี 10 ไฟล์ที่ระบบสร้างขึ้นทุกวันภายใต้ D: \ Temp ชื่อถูกสร้างขึ้นแบบสุ่ม

สมมติว่าฉันต้องเปลี่ยนชื่อเก่าที่สุดให้เป็น 'aaa' อันที่เก่าแก่ที่สุดที่สองเป็น 'bbb' จากนั้น 'ccc', 'ddd' และอื่น ๆ

สมมติว่านี่เป็นชื่อเป้าหมายที่ฉันจะใช้:

Beijing
shanghai
hangzhou
suzhou
newyork
lanzhou
huzhou
guangzhou
tianjin
sichuang

ใครสามารถช่วยสคริปต์ชุดงานเพื่อให้บรรลุนี้

ฉันถามคำถามนี้เมื่อวานนี้จริง ๆและได้รับคำตอบที่ยอดเยี่ยมในการใช้ PowerShell แต่วันนี้ฉันสังเกตเห็นใน VM ของ บริษัท ฉันไม่ได้ติดตั้ง PowerShell (ไม่ได้รับอนุญาตให้ติดตั้งด้วยตัวเอง) ดังนั้นต้องโพสต์คำถามอีกครั้ง สามารถรักษา (ยอมรับ) คะแนนของพวกเขา


มันจะต้องมีการแบทช์? คุณสามารถใช้โปรแกรมเปลี่ยนชื่อ GUI พกพาใด ๆ ได้หรือไม่?
Karan

ใช่จะต้องเป็นชุด ไม่สามารถใช้เครื่องมือ GUI ใด ๆ เนื่องจากเป็นเซิร์ฟเวอร์ที่ใช้ร่วมกันแบบทีมและใช้เวลานานในการติดตั้งทุกอย่างที่นั่น

เอลล่ากรุณาลงทะเบียนบัญชีของคุณที่นี่ ดูเหมือนว่าคุณจะสูญเสียคุกกี้ของคุณไปเรื่อย ๆ และคุณควรแก้ไขคำถามเดิมหรือแสดงความคิดเห็นแทนที่จะโพสต์คำตอบด้านล่าง ดูsuperuser.com/help/user-mergeสำหรับข้อมูลเพิ่มเติม
slhck

dir /a-dหากคุณต้องการวันที่สร้างคุณควรจะแสดงรูปแบบวันที่ของคุณการส่งออกของ
Endoro

สวัสดี slhck ได้ลงทะเบียน ควรจะทำงานได้ดีในขณะนี้ ขอบคุณสำหรับการเตือน
ella

คำตอบ:


0
@echo off
setlocal disableDelayedExpansion
set "file1=aaa"
set "file2=bbb"
set "file3=ccc"
set "file4=ddd"
set "file5=eee"
set "file6=fff"
set "file7=ggg"
set "file8=hhh"
set "file9=iii"
set "file10=jjj"

for /f "tokens=1,2* delims=: " %%A in (
  'wmic datafile where "drive='d:' and path='\\temp\\'" get creationDate^, name ^| findstr "^[0-9]" ^| sort ^| findstr /n "^"'
) do for /f "delims=" %%F in ("%%C") do (
  setlocal enableDelayedExpansion
  for %%N in ("!file%%A!") do (
    endlocal
    ren "%%F" %%N
  )
)

หากคุณต้องการที่จะเปลี่ยนเส้นทางแล้วคุณต้องให้แน่ใจว่าสองครั้งขึ้นทั้งหมด\เป็นและให้แน่ใจว่าเส้นทางจะเริ่มต้นและจบลงด้วยการ\\ \\อักษรระบุไดรฟ์ที่เหมาะสม (พร้อมโคลอน) ต้องปรากฏในตัวเลือกไดรฟ์

ทั้งค่าไดรฟ์และเส้นทางจะต้องอยู่ในเครื่องหมายคำพูดเดียว - WMIC ใช้ไวยากรณ์ SQL


ขอบคุณ dbenham แต่เมื่อฉันเปลี่ยนเส้นทางในสคริปต์ของคุณและเรียกใช้มันฉันได้รับ 'คำอธิบาย = แบบสอบถามไม่ถูกต้อง "รหัสข้อผิดพลาดนี่คือสคริปต์หลังจากที่ฉันเปลี่ยนมันอาจดูโง่ แต่ฉันเกือบใหม่ทั้งหมดในการเขียนสคริปต์ฉันยัง สังเกตว่าคุณตั้งค่า "chars = abcdefghij" แต่ถ้าฉันต้องการเปลี่ยนชื่อไฟล์ 10 ไฟล์แตกต่างกันหรือไม่พูดที่นี่เป็นชื่อไฟล์เป้าหมายจากเก่าไปหาใหม่ล่าสุด: ปักกิ่งเซี่ยงไฮ้หางโจวซูโจว newyork lanzhou huzhou guangzhou tianjin sichuang
ella

@ella - คุณควรจะมีส่วนร่วมกับคำถามของคุณมากขึ้น ฉันได้อัปเดตคำตอบเพื่อให้การตั้งค่าชื่อเป้าหมายง่ายขึ้น คุณควรระบุไดรฟ์และเส้นทางที่ถูกต้อง เพียงแค่ให้แน่ใจว่าไวยากรณ์เป็นไปตามที่ฉันได้อธิบายไว้ข้างต้น หากคุณยังคงมีปัญหาอยู่คุณควรระบุเส้นทางเฉพาะที่ไม่ทำงาน
dbenham

, ขอบคุณสำหรับความช่วยเหลือ ฉันจะลองอีกครั้งเมื่อฉันได้ทำงานวันนี้
ella

0

สิ่งนี้น่าจะเหมาะกับคุณ มันเปลี่ยนชื่อ 26 ไฟล์ไปaaaสู่ความzzzวันที่สร้างเก่าแก่ที่สุดเป็นครั้งแรก ดูที่เอาต์พุตและลบechoคำสั่งถ้าตกลง

@echo off&setlocal
set "startfolder=D:\temp"
set "alphas=abcdefghijklmnopqrstuvwxyz"
cd /d "%startfolder%"

set /a counter=0
for /f "tokens=3*" %%a in ('dir /a-d /od /tc ^| findstr "^[0-9]"') do set "fname=%%b"&call:process
goto:eof

:process    
setlocal enabledelayedexpansion
set "nname=!alphas:~%counter%,1!!alphas:~%counter%,1!!alphas:~%counter%,1!"
if not defined nname goto:eof
echo rename "%fname%" "!nname!"
endlocal
set /a counter+=1
goto:eof

หากdirคำสั่ง showes เวลากับ AM / PM tokens=4*ตั้ง


ขอบคุณและขอโทษฉันไม่ได้ใส่ไว้อย่างชัดเจน เมื่อฉันพูดว่า 'aaa', 'bbb', 'ccc' ,,, ฉันไม่ได้หมายความอย่างนั้น สมมติว่าชื่อเป้าหมายคือ: ปักกิ่งเซี่ยงไฮ้หางโจวซูโจว newyork หลานโจวกวางโจวกว่างโจวเทียนจิน sichuang
ella

อ้อเข้าใจแล้ว. ในกรณีนี้คุณควรตั้งคำถามใหม่
Endoro
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.