2010-08-31 14 views
6

में में खिड़कियों बैच फ़ाइल रन पाश के लिए बनाने के लिए मुझे लगता है कि यह करता है एक विंडोज़ बैच फ़ाइल है:नाम आदेश

for %%s in (*.sql) do call 

It loops through all the sql script in a folder. 

In the folder the file names are like: 
s4.06.01.sql 
s4.07.01.sql 
s4.08.01.sql 
s4.10.01.sql 
s5.01.sql 

लेकिन फ़ाइलों बेतरतीब ढंग से (नाम क्रम में नहीं) के माध्यम से लूप के लिए चला जाता है, यह पहले s5.01 चलाता है, फिर s4.06, फिर s4.08, फिर s4.10, फिर s4.07 चलाता है। मैं उन्हें नाम आदेश में कैसे चला सकता हूं?

यह काम करता था, लेकिन अब यह नहीं करता है। इस समस्या का कारण क्या हो सकता है?

उत्तर

3

जैरी का जवाब समस्या का कारण बनने से बहुत अच्छा हो सकता है।

आप इसे

for %%s in (*.sql) do call

बदलकर

for %%s in (dir"*.sql ^| sort) do call


को cudo के LonelyPixel

को हल कर सकते हैं संपादित करें

पोस्ट किया गया समाधान विंडोज 8 मशीन पर संभव नहीं है (शायद यह विंडोज एक्सपी के साथ वापस आया लेकिन मुझे कोई जानकारी नहीं है)

विंडोज 8 कमांड प्रॉम्प्ट का उपयोग कर एक कार्य समाधान है। यह SQLCMD था, उप-निर्देशिका के स्क्रिप्ट के साथ

for /f "tokens=*" %%s in ('dir /b *.sql ^| sort') do echo "%%s" 

मेरे मामले में,:

for /f "tokens=*" %%s in ('dir /b *.sql ^| sort') do echo %%s 
+2

या, '/ च" usebackq "%% में एस के लिए (\' dir * .sql/बी/पर \ ') call' करते –

+0

पैट्रिक, अपने समाधान के बाद काट देता है सभी फ़ाइलों के नाम एक जगह, तो यह केवल आंशिक रूप से उपयोगी है। – ygoe

+1

लिवन, आपका समाधान पूरी तरह से विफल रहता है। यदि मैं "किसी स्थान से" को प्रतिस्थापित करता हूं, तो यह "dir", "|" और "sort" भी मिलता है। इसलिए यह काम नहीं करता है। – ygoe

2

यदि स्मृति सेवा करता है, तो यह फाइल सिस्टम द्वारा लौटाए गए क्रम में फ़ाइलों पर काम करेगा। इस प्रकार, यदि आप इसे डिस्क विभाजन पर चलाते हैं जो NTFS के साथ स्वरूपित है, तो नाम क्रमबद्ध क्रम में वापस आ जाएंगे ताकि उन्हें क्रमबद्ध क्रम में संसाधित किया जा सके। यदि डिस्क विभाजन को FAT या FAT32 जैसी किसी चीज़ के साथ स्वरूपित किया गया है, तो नामों को कम या कम यादृच्छिक क्रम में पुनर्प्राप्त (और संसाधित) किया जाएगा।

1

मैं भी फ़ाइल नाम में रिक्त स्थान का सामना करना पड़ा, तो मैं तो जैसे इनपुट चर के आसपास उद्धरण जोड़ा जैसे इतना:

SET "machineName=localhost" 
for /f "tokens=*" %%f in ('dir /b PostDeployScripts\*.sql ^| sort') do sqlcmd -E -S%machineName% -i"PostDeployScripts\%%f"